静态导入方法重叠

Moz*_*ath 6 java import static-import method-signature method-declaration

如果你有一个静态导入的java.lang.Integer类,我的类也有一个静态方法,parseInt(String)那么调用parseInt("12345")指向哪个方法?

提前致谢!

Seb*_*ann 6

如果你在自己的班级里面,它会调用你的方法.
如果您在类之外(并导入两个类),则必须指定要使用的类.

证明:http://java.sun.com/docs/books/jls/download/langspec-3.0.pdf $ 8和$ 6.3(见评论)

  • 来自Java语言规范$ 8:成员(第8.2节)的范围(第6.3节)是成员所属类的声明的整个主体.| 从6.3美元起:声明的范围是程序的一个区域,声明中声明的实体可以使用一个简单的名称(如果它是可见的(第6.3.1节)). (2认同)
  • 我认为它仍然遗漏了一点(来自jls):§6.3.1`名为n的方法的声明d隐藏了任何其他名为n的方法的声明,这些声明位于整个范围内d出现的封闭范围内d.` (2认同)

jen*_*aiz 5

试试这个:

import static java.lang.Integer.parseInt;

public class Test {
    public static void main(String[] args) {
        System.out.println(parseInt("12345"));
    }

    private static int parseInt(String str) {
        System.out.println("str");
        return 123;
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

str
123
Run Code Online (Sandbox Code Playgroud)

首先执行您的类中的方法.

  • 你可以展示一个参考,表明它是由标准保证的吗?它可能是编译器所依赖的...... (2认同)