【发布时间】:2017-12-30 20:29:06
【问题描述】:
假设以下方法(Java 8):
public <T> List<Class<T>> getList() {
return new ArrayList<>();
}
public <T> List<T> getList2() {
return new ArrayList<>();
}
以下代码使用这些方法:
@Test
public void testLists() {
getList().add(String.class); // Does not compile
this.<String>getList().add(String.class); // Compiles
getList2().add(String.class); // Compiles
}
第二个和第三个调用编译正常,而第一个给出:
列表中的
add(java.lang.Class<java.lang.Object>)不能应用于add(java.lang.Class<java.lang.String>)
我不完全理解这里的解析步骤,也许有人可以解释为什么我需要类型见证并且编译器不会自动推断类型?
【问题讨论】:
标签: java generics compiler-errors