У меня есть следующий класс:
import java.util.HashSet;
import java.util.List;
public class OverloadTest<T> extends HashSet<List<T>> {
private static final long serialVersionUID = 1L;
public OverloadTest(OverloadTest<? extends T> other) {}
public OverloadTest(HashSet<? extends T> source) {}
private OverloadTest<Object> source;
public void notAmbigious() {
OverloadTest<Object> o1 = new OverloadTest<Object>(source);
}
public void ambigious() {
OverloadTest<Object> o2 = new OverloadTest<>(source);
}
}
Это компилируется под JDK 7 javac, а также затмение (с соблюдением соответствия 1.7 или 1.8). Однако, пытаясь скомпилировать под JDK 8 javac, я получаю следующую ошибку:
[ERROR] src/main/java/OverloadTest.java:[18,35] reference to OverloadTest is ambiguous
[ERROR] both constructor <T>OverloadTest(OverloadTest<? extends T>) in OverloadTest and constructor <T>OverloadTest(java.util.HashSet<? extends T>) in OverloadTest match
Обратите внимание, что эта ошибка применяется только к вызову конструктора в методе ambigous()
, а не методе notAmbiguous()
. Единственное отличие состоит в том, что ambiguous()
полагается на оператор алмаза.
Мой вопрос заключается в следующем: Явак под JDK 8 правильно помечен двусмысленным разрешением или был javac под JDK 7, неспособным поймать двусмысленность? В зависимости от ответа мне нужно либо записать ошибку JDK, либо ошибку ecj.