のJava-8インターフェイス内部静的メソッドを定義することができ、しかしrestrictsそれだけインタフェース名で呼び出し:不正静的インタフェースメソッド呼び出し
9.4: An interface can declare static methods, which are invoked without reference to a particular object.
例:
interface X {
static void y() {
}
}
...
X x = new X() {};
x.y();
にエラーが発生:
error: illegal static interface method call
x.y();
^
the receiver expression should be replaced with the type qualifier 'X'
多くの場合、JLSではこの種の禁止が説明されています。この場合、私は詳細なものは見つけられませんでした。だから、私はこのルールの包括的または正式な説明を探しています:なぜ特定のオブジェクト参照を介して静的メソッドを呼び出すことは禁じられていますか?何が壊れますか?
最初にオブジェクト参照で静的メソッドを呼び出すことができる理由は... –
その上に、上の行にあるインターフェイスXのインスタンスを取得するにはどうしたらいいですか? – aiguy
は@SkinnyJに完全に同意します。私は、Java開発者が、そのインターフェイスを実装する匿名クラスを作成することによって、オブジェクトによって静的なavalaibleをいくらか混乱させて、間違いを訂正しようとしていると思っています( – silentprogrammer