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

时间:2011-09-02 09:52:37

标签: java arrays list toarray

我定义了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。当类为father-and-son relation

时,它与通用情况不同

我试图进行投射:

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

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

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

有什么问题?

3 个答案:

答案 0 :(得分:12)

由于类型擦除,ArrayList在运行时不知道它的泛型类型,因此它只能为您提供最通用的Object []。您需要使用the other toArray method,它允许您指定所需的数组类型。

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

答案 1 :(得分:2)

这样做的方法是:

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

对于记录,您的代码无法编译的原因不是只是类型擦除。问题是List<T>.toArray()会返回Object[],并且在引入泛型之前就已经这样做了。

答案 2 :(得分:1)

请改为:

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

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