修改 我发现第二个副本与我的问题最匹配并且是最有用的。
我有一个泛型类,它有一个带泛型返回类型的方法。返回类型的具体类在定义中给出。当我使用该方法时,编译器会提供未经检查的转换警告。
一个例子可以更好地解释它。
public class MyGenericClass<T> {
public List<String> getStringList() {
return new ArrayList<String>();
}
}
public class Test {
public static void main(String[] args) {
MyGenericClass mgc = new MyGenericClass<>();
List<String> myStringList = mgc.getStringList();
}
}
main方法的最后一行导致编译器警告:
warning: [unchecked] unchecked conversion
List<String> myStringList = mgc.getStringList();
^
required: List<String>
found: List
当我指定T时不会发生此问题。例如,当我将Integer用作T时,不会发生此问题。 在没有指定类型的情况下使用泛型类是不好的,但我无法理解为什么返回类型'List&lt; String&gt;'当我没有指定T时变成'List'。有没有人知道这背后的逻辑,你能指点我JLS的相关部分吗?