在Java中列出类的toArray-为什么我不能将“Integer”列表转换为“Integer”数组?

我定义了List stack = new ArrayList();

当我试图通过以下方式将其转换为数组时:

 Integer[] array= stack.toArray(); 

我得到这个例外:

 Exception in thread "main" java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from Object[] to Integer[]. 

为什么? 它与Integer完全相同 – Integer。 当这些类是父子关系时,它不像这种通用情况

我试着做铸造:

  Integer[] array= (Integer[]) stack.toArray(); 

但在这里我得到这个错误:

 Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; 

问题是什么?

由于类型擦除,ArrayList在运行时不知道它的generics类型,因此它只能为您提供最通用的Object []。 您需要使用另一个toArray方法 ,该方法允许您指定所需的数组类型。

 Integer[] array= stack.toArray(new Integer[stack.size()]); 

这样做的方法是这样的:

 Integer[] array = stack.toArray(new Integer[stack.size()]); 

对于记录,您的代码不编译的原因不仅仅是类型擦除。 问题是List.toArray()返回一个Object[] ,它在引入generics之前就已经完成了。

改为:

 Integer[] array = stack.toArray(new Integer[stack.size()]); 

我们需要将“seed”数组作为参数传递给toArray方法。