繁体   English   中英

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

[英]List class's toArray in Java- Why can't I convert a list of “Integer” to an “Integer” array?

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

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

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在运行时不知道它的泛型类型,因此它只能为您提供最通用的Object []。 您需要使用另一个toArray方法 ,该方法允许您指定所需的数组类型。

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

这样做的方法是:

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

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

改为:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM