18

以下用 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();
        }
    }
}

我想知道:是这样设计的,还是理想情况下不应该编译这段代码,因此这是一个编译器错误?(我个人认为这是一个错误)。

UPD:提交了一个错误,ID:9052188

UPD-2:它看起来B.super.test()通常是一个有效的结构,因为如果test()方法default比它工作正常。这个事实只会让事情变得更复杂。

4

1 回答 1

10

最后这个问题被 Java 开发者支持团队承认为一个错误,这里是一个链接:https ://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8194847

于 2018-01-09T21:37:19.293 回答