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開發人員正試圖通過創建一個實現該接口的匿名類來改正他們通過使對象具有靜態可用性而造成的錯誤,這些對象有點令人困惑 – silentprogrammer