1
class SomeClass
{
    static public void someStaticMethod(){};
}

SomeClass SomeClass=new SomeClass();
SomeClass.someStaticMethod();

如何调用对象名与类名相同的任何类的静态方法?

4

3 回答 3

4

你不需要做任何事情——它会照原样工作(尽管使用这样一个令人困惑的代码几乎没有意义)。

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将是您在上面声明的一行的变量,它优先于类型。

于 2013-01-28T15:56:02.013 回答
3

变量名不应大写,因此您将拥有:

SomeClass.someStaticMethod();

对于静态的,并且:

someClass.someNonStaticMethod();

对于非静态版本。

于 2013-01-28T15:52:37.227 回答
0

不要以大写字母开头的实例名称!

你应该写:

SomeClass someClass=new SomeClass();

或者更好:

SomeClass someObject=new SomeClass();

如果您遵循这些非常常见的规则,您将不会遇到此问题。(我试图猜测这个'-1'来自哪里!!!)

于 2013-01-28T15:51:53.797 回答