尝试编译以下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);
}
使代码可编辑,这非常奇怪,因为界面完全相同。
答案 0 :(得分:0)
Oracle刚刚承认这似乎是一个错误。
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8177440