我正在学习Java中的泛型,并接触到了一段非常有趣的代码。我知道在Java中将一个类型的列表添加到另一个类型的列表是不合法的。
List<Integer> integerList = new ArrayList<Integer>();
List<String> stringList=integerList;
所以在第二行我会收到编译时错误。
但是如果我像这样在类内创建一个通用方法,
class GenericClass <E>{
void genericFunction(List<String> stringList) {
stringList.add("foo");
}
// some other code
}
在主类中使用整数列表调用该方法时,我没有收到任何错误。
public class Main {
public static void main(String args[]) {
GenericClass genericClass=new GenericClass();
List<Integer> integerList= new ArrayList<Integer>();
integerList.add(100);
genericClass.genericFunction(integerList);
System.out.println(integerList.get(0));
System.out.println(integerList.get(1));
}
}
输出
100
foo
为什么我没有收到任何错误信息?
GenericClass genericClass
使用了原始类型,因此genericClass
上的泛型类型检查将被直接禁用。尝试使用GenericClass<?> genericClass
,你应该会收到一个错误提示。 - ThomasgenericFunction()
要求一个List<String>
,而不是List<E>
,然而,给它一个List<Integer>
也能够运行,而如果GenericClass
不是泛型类,那么这种情况就不会起作用。 - Florent Bayle