【发布时间】:2016-01-10 18:17:23
【问题描述】:
Java-8 允许在接口内部定义静态方法,但 restricts 它只能通过接口名称调用:
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 中,此类禁令通常都有解释。在这种情况下,我没有找到任何详细信息。所以我正在寻找这个规则的全面或权威解释:为什么禁止通过特定对象引用调用静态方法?它会破坏什么?
【问题讨论】:
-
也许更好的问题是为什么静态方法可以首先在对象引用上调用...
-
请注意,我们如何在上面的行中获取接口 X 的实例?
-
完全同意 @SkinnyJ 我认为 Java 开发人员正试图纠正他们所做的错误,方法是通过对象使静态可用,这有点令人困惑
-
@SkinnyJ 非常好的问题,过去一年我一直在想这个问题。我想知道这个问题是否适合 StackExchange 网站之一
-
@VinceEmigh stackoverflow.com/questions/610458/…