我有以下类:
import java.util.HashSet;
import java.util.List;
public class OverloadTest extends HashSet> {
private static final long serialVersionUID = 1L;
public OverloadTest(OverloadTest extends T> other) {}
public OverloadTest(HashSet extends T> source) {}
private OverloadTest source;
public void notAmbigious() {
OverloadTest o1 = new OverloadTest(source);
}
public void ambigious() {
OverloadTest o2 = new OverloadTest<>(source);
}
}
这在JDK 7的javac以及eclipse(符合性设置为1.7或1.8)下进行编译.但是,尝试根据JDK 8的javac进行编译时,我会收到以下错误信息:
[ERROR] src/main/java/OverloadTest.java:[18,35] reference to OverloadTest is ambiguous
[ERROR] both constructor OverloadTest(OverloadTest extends T>) in OverloadTest and constructor OverloadTest(java.util.HashSet extends T>) in OverloadTest match
请注意,此错误仅适用于ambigous()方法中的构造函数调用,而不适用于notAmbiguous()方法中的构造函数调用.唯一的区别是,ambiguous()依赖于钻石操作符.
我的问题是:JDK 8中的javac是否正确标记了歧义的解决方法,否则JDK 7中的javac不能捕捉到歧义?根据答案,我需要提交一个JDK错误或一个ecj错误.