我通过“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吗? –