"java.lang.NoSuchFieldError: super" exception - bug in compiler?
"java.lang.NoSuchFieldError: super" exception - bug in compiler?
在 Java-9 中编写的以下代码是 运行 在 运行time 中给了我一个非常奇怪和有趣的异常:
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
则它会起作用美好的。这个事实只会让事情变得更复杂。
最后这个问题被 Java 开发者支持团队承认为一个错误,这里是 link:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8194847
在 Java-9 中编写的以下代码是 运行 在 运行time 中给了我一个非常奇怪和有趣的异常:
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
则它会起作用美好的。这个事实只会让事情变得更复杂。
最后这个问题被 Java 开发者支持团队承认为一个错误,这里是 link:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8194847