class SomeClass
{
static public void someStaticMethod(){};
}
SomeClass SomeClass=new SomeClass();
SomeClass.someStaticMethod();
如何调用对象名与类名相同的任何类的静态方法?
class SomeClass
{
static public void someStaticMethod(){};
}
SomeClass SomeClass=new SomeClass();
SomeClass.someStaticMethod();
如何调用对象名与类名相同的任何类的静态方法?
你不需要做任何事情——它会照原样工作(尽管使用这样一个令人困惑的代码几乎没有意义)。
JLS #6.5.2中指定了如何处理不明确的名称。尤其:
如果 AmbiguousName 是一个简单的名称,由一个标识符组成:
- 如果标识符出现在具有该名称的局部变量声明(第 14.4 节)或参数声明(第 8.4.1 节、第 8.8.1 节、第 14.20 节)或字段声明(第 8.3 节)的范围内(第 6.3 节),则AmbiguousName 被重新分类为 ExpressionName。
- [...]
- 否则,如果在包含标识符的编译单元(第 7.3 节)中声明了该名称的类型,要么通过单一类型导入声明(第 7.5.1 节),要么通过按需类型导入声明( §7.5.2),或通过单静态导入声明 (§7.5.3),或通过按需静态导入声明 (§7.5.4),然后将 AmbiguousName 重新分类为 TypeName。
因此,在您的情况下,SomeClass
将是您在上面声明的一行的变量,它优先于类型。
变量名不应大写,因此您将拥有:
SomeClass.someStaticMethod();
对于静态的,并且:
someClass.someNonStaticMethod();
对于非静态版本。
不要以大写字母开头的实例名称!
你应该写:
SomeClass someClass=new SomeClass();
或者更好:
SomeClass someObject=new SomeClass();
如果您遵循这些非常常见的规则,您将不会遇到此问题。(我试图猜测这个'-1'来自哪里!!!)