问题
首先对比一下以下两段代码,都是声明两个数组,其中一个使用泛型,一个不使用泛型。使用泛型的一个编译失败,由此可知,Java 不支持泛型数组。
List
List[] list = new LinkedList[10];
原因
Java 泛型通过类型擦除实现,编译时类型参数就会被擦掉。例如:声明一个 List
List
List
// 输出true
System.out.println(stringList.getClass()==integerList.getClass());
假设 Java 允许使用泛型数组,我们看看有什么问题。
List
经过类型擦除后。
List[] list = new LinkedList[10];
接下来我们就可以往数组中放东西了。
list[1] = new LinkedList
list[0] = new LinkedList
这里就出现问题了,声明的是 LinkedList
创建泛型数组的唯一方式,是先创建一个擦除类型的数组,然后使用强制类型转型,这种类型转换将产生一个关于未检验的类型转换的编译警告。
List
list[0] = new LinkedList
list[1] = new LinkedList