Java不允许创建集合数组,显示编译错误cannot create a generic array
ArrayList<String>[] list = new ArrayList<String>[2];
但我可以创建像这样的通用集合
ArrayList<?>[] list = new ArrayList<?>[2];
为什么在上述情况下没有编译器警告
答案 0 :(得分:1)
在Java中,您无法创建通用数组。我认为不允许这样做的原因是因为数组是reified
,这意味着类型信息在运行时是已知的并且由它们强制执行。相比之下,泛型的类型信息在运行时为erased
。
由于上述原因,允许使用此类T[] array = new E[size];
,其中E是T的子类型。
当您使用泛型时,您不允许执行以下操作:List<T> list = new ArrayList<E>();
其中E是T的子类型。
数组允许的唯一允许类型参数是unbound wildcard ?
,因为这意味着接受任何类型。