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

Num*_*tor 8 java arrays list toarray

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

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

Integer[] array= stack.toArray();
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Type mismatch: cannot convert from Object[] to Integer[].
Run Code Online (Sandbox Code Playgroud)

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

我试图做铸造:

    Integer[] array= (Integer[]) stack.toArray();
Run Code Online (Sandbox Code Playgroud)

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

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
Run Code Online (Sandbox Code Playgroud)

问题是什么?

Thi*_*ilo 12

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

Integer[] array= stack.toArray(new Integer[stack.size()]);
Run Code Online (Sandbox Code Playgroud)