在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
返回一个Object[]
,它在引入generics之前就已经完成了。
改为:
Integer[] array = stack.toArray(new Integer[stack.size()]);
我们需要将“seed”数组作为参数传递给toArray
方法。