Question:
Java-8允许在接口内部定义静态方法,但仅通过接口名称限制其调用:
9.4:接口可以声明静态方法,这些方法在不引用特定对象的情况下被调用。
例如:
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中,这种禁令经常有一种解释。在这种情况下,我没有发现任何详细信息。因此,我正在寻找对此规则的全面或权威的解释:为什么禁止通过特定的对象引用调用静态方法?它有什么坏处?
Answer:
相当强烈的共识是,有关类的静态方法也不应该使用所讨论的语法,但是到意识到这一点时,更改为时已晚。最近添加的接口方法还为时不晚。
另外,允许该语法将引入菱形问题的可能性,因为一个类可以实现定义碰撞方法的接口。
Notice:
接口中的静态方法永远不会被继承。
网友评论