Java方法调用对于javac而言并不适用于Eclipse

时间:2017-03-22 22:00:22

标签: java eclipse generics

尝试编译以下Test.java源文件:

interface A<K> {
    void method(K k);
}

interface B {
    void method(Integer k);
}

interface C extends A<Integer>, B {
}

class D implements C {
    public void method(Integer i) {}
}

public class Test {
    public static void main(String args[]) {
        C c = new D();
        c.method(Integer.valueOf(0));
    }
}

方法调用c.method()由javac声明为ambigious,但不是由Eclipse声明。我在StackOverflow上看到了几个这类问题的例子(javac给出了一个错误,Eclipse没有),但在这个特定的情况下,我真的不明白这个调用是如何被认为是模棱两可的,给定编译器编译接口C。

谁没事?

此示例在Java 8和Java 9都失败。请注意,使方法显式:

interface C extends A<Integer>, B {
    void method(Integer k);
}

使代码可编辑,这非常奇怪,因为界面完全相同。

1 个答案:

答案 0 :(得分:0)

Oracle刚刚承认这似乎是一个错误。

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8177440