创建集合数组

时间:2016-09-06 07:08:01

标签: java arrays collections

Java不允许创建集合数组,显示编译错误cannot create a generic array

ArrayList<String>[] list = new ArrayList<String>[2];

但我可以创建像这样的通用集合

ArrayList<?>[] list = new ArrayList<?>[2];

为什么在上述情况下没有编译器警告

1 个答案:

答案 0 :(得分:1)

在Java中,您无法创建通用数组。我认为不允许这样做的原因是因为数组是reified,这意味着类型信息在运行时是已知的并且由它们强制执行。相比之下,泛型的类型信息在运行时为erased

由于上述原因,允许使用此类T[] array = new E[size];,其中E是T的子类型。

当您使用泛型时,您不允许执行以下操作:List<T> list = new ArrayList<E>();其中E是T的子类型。

数组允许的唯一允许类型参数是unbound wildcard ?,因为这意味着接受任何类型。