【问题标题】:Creating array of collections [duplicate]创建集合数组[重复]
【发布时间】:2016-09-06 07:08:01
【问题描述】:
Java 不允许创建集合数组,显示编译错误cannot create a generic array
ArrayList<String>[] list = new ArrayList<String>[2];
但我可以像这样创建通用集合
ArrayList<?>[] list = new ArrayList<?>[2];
为什么上述情况没有编译器警告
【问题讨论】:
标签:
java
arrays
collections
【解决方案1】:
在 Java 中,您不能创建泛型数组。我认为不允许这样做的原因是因为数组是reified,这意味着类型信息在运行时是已知的并且由它们强制执行。相比之下,泛型的类型信息在运行时是erased。
由于上述原因,允许有类似T[] array = new E[size]; 的东西,其中 E 是 T 的子类型。
当你使用泛型时,你不能这样做:List<T> list = new ArrayList<E>(); 其中 E 是 T 的子类型。
数组唯一允许的类型参数是unbound wildcard ?,因为这意味着可以接受任何类型。