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

Tro*_*yvs 0 java arrays generics instance new-operator

非常简单的代码:

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

它抛出一个异常'在线程中的异常"main"java.lang.ClassCastException:[[我不能强制转换为java.lang.reflect.Array"

我哪里出错了,怎么解决?

Era*_*ran 5

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

int[][] a3 = (int[][]) Array.newInstance(a.getClass(), a.length);
Run Code Online (Sandbox Code Playgroud)

Array 是用于使用反射创建数组实例的类,但数组实例不是该类的实例.

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

int[] a3 = (int[]) Array.newInstance(int.class, a.length);
Run Code Online (Sandbox Code Playgroud)