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.5.1) または型インポートオンデマンド宣言 (§7.5.1) によって、識別子を含むコンパイル単位 (§7.3) で宣言されている場合。 §7.5.2)、または単一静的インポート宣言 (§7.5.3)、または静的インポート オンデマンド宣言 (§7.5.4) によって、AmbiguousName は TypeName として再分類されます。
したがって、あなたの場合、SomeClass
上記の1行で宣言した変数になり、型よりも優先されます。
変数名は大文字にしないでください。したがって、次のようになります。
SomeClass.someStaticMethod();
静的なものと:
someClass.someNonStaticMethod();
非静的バージョンの場合。
インスタンス名を大文字で始めないでください!
あなたは書くべきです:
SomeClass someClass=new SomeClass();
またはさらに良い:
SomeClass someObject=new SomeClass();
これらの非常に一般的なルールに従えば、この問題は発生しません。(この「-1」がどこから来たのか推測しようとしています!!!)