java Array.newInstance抛出ClassCastException,为什么?

时间:2018-11-20 11:06:06

标签: java arrays generics instance new-operator

非常简单的代码:

    int[] a = new int[]{4,1,2,3};
    Array a3 = (Array) Array.newInstance(a.getClass(), a.length);

它引发异常'线程“ main”中的异常java.lang.ClassCastException:[[我无法转换为java.lang.reflect.Array'

我在哪里弄错了以及如何解决?

1 个答案:

答案 0 :(得分:5)

Array.newInstance(a.getClass(), a.length)创建一个二维int数组(当您创建一个元素类型为int[]的数组时会发生这种情况),因此应该为:

int[][] a3 = (int[][]) Array.newInstance(a.getClass(), a.length);

Array是用于通过反射创建数组实例的类,但是数组实例不是该类的实例。

顺便说一句,如果您打算创建一维int数组(即int[]),则应编写:

int[] a3 = (int[]) Array.newInstance(int.class, a.length);