我通過「Java泛型和集合」一書的工作後,和整個這一段代碼,這是爲了編譯並沒有錯誤運行Java泛型名稱衝突類型擦除
class Overloaded {
public static Integer sum(List<Integer> ints) {
int sum = 0;
for (int i : ints) sum += i;
return sum;
}
public static String sum(List<String> strings) {
StringBuffer sum = new StringBuffer();
for (String s : strings) sum.append(s);
return sum.toString();
}
}
然而,這個例子來無法編譯有錯誤
Error:(16, 26) java: name clash: sum(java.util.List) and sum(java.util.List) have the same erasure
我可以理解爲什麼這是一個錯誤。但是,本書特別提到這是允許的,因爲編譯器可以基於返回類型區分2種方法。
然後我發現這個線程 Type Erasure and Overloading in Java: Why does this work?
這也表明,這個例子應該編譯。任何想法是什麼導致編譯失敗?
我使用的是JDK 1.8。 Java 1.8最近發生了什麼變化?如果這是相關的,我使用最新的IntelliJ IDEA作爲IDE。
你可以查閱一下JDK版本的IntelliJ已經配置編譯這段代碼? –
帖子引用指的是javac編譯java 6的一個bug。您使用java 8. – davidxxx
@davidxxx - 這不是很清楚。它不適用於Java8或Java6嗎? –