以下使用Java-9编写的代码在运行时中给出了一个非常奇怪且有趣的例外:
Exception in thread "main" java.lang.NoSuchFieldError: super
at A$C.test(A.java:15)
at A.main(A.java:5)
代码:
public class A {
public static void main(String[] args) {
new C().test();
}
interface B {
private void test() {
}
}
static class C implements B {
void test() {
B.super.test();
}
}
}
我想知道:它是这样设计的,还是理想情况下这个代码不应该被编译,因此这是一个编译器错误? (我个人认为这是 bug )。
UPD :提交了一个错误,ID:9052188
UPD-2 :看起来B.super.test()
通常是有效构造,因为如果test()
方法是default
,那么它的工作正常。这个事实让事情变得更加复杂。
答案 0 :(得分:10)
最后,Java Developer Support小组承认这个问题是一个错误,这里有一个链接:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8194847