10

我定义了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;

问题是什么?

4

3 回答 3

13

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

Integer[] array= stack.toArray(new Integer[stack.size()]);
于 2011-09-02T09:54:45.373 回答
2

这样做的方法是这样的:

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

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

于 2011-09-02T09:55:39.360 回答
1

改为这样做:

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

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

于 2011-09-02T09:55:00.070 回答