非法的静态接口方法调用

Java-8允许在接口内部定义静态方法,但仅通过接口名称限制它的调用:

9.4:接口可以声明静态方法,这些方法在不引用特定对象的情况下被调用。

例如:

interface X { static void y() { } } ... X x = new X() {}; xy(); 

导致错误:

 error: illegal static interface method call xy(); ^ the receiver expression should be replaced with the type qualifier 'X' 

通常在JLS中,这种禁令有一个解释。 在这种情况下,我没有发现任何详细的信息。 所以我正在寻找对此规则的全面或权威解释:为什么禁止通过特定对象引用调用静态方法? 它打破了什么?

这是一个相当强烈的共识,即不应该对类的静态方法允许有问题的语法,但是到了实现的时候,改变已经太晚了。 对于最近添加的界面方法来说还不算太晚。

另外,允许这种语法会引入钻石问题的可能性,因为类可以实现定义冲突方法的接口。