首先按照对API中文字的理解,应该是这样:
//如果参数class是数组,那么会返回一个原类型数组,维数是原先的维数加上后面的参数个数
//如果参数class不是数组,那么会返回一个原类型数组,维数是后面的参数个数
那么我们来验证,先看第一段代码:- int[] array;
- String s;
- Object o;
-
- array = new int[]{2,3};//数组类
- o = Array.newInstance(array.getClass(), 1);
- System.out.println(o.getClass().getName());
-
- s = "aaa";//非数组类
- o = Array.newInstance(s.getClass(), 1);
- System.out.println(o.getClass().getName());
复制代码 结果是:
[[I
[Ljava.lang.String;先解释一下,结果是什么意思。这里打印出的是class的名字,"["表示是数组,I表示是int型,两个“[”表示是二维数组,“L”表示class或Interface,这里后面又给了是String类。
那就好理解了,第一个打印出的是二维的int型数组,第二个打印的是一维的String数组。
是因为第一个数组,原先是int型的一维数组,加上后面参数的个数,注意,参数个数是指class参数后的int型参数的个数,这里是一个,所以是二维的int型数组。
第二个原先不是数组,按照非数组处理,会变成数组,维数是后面参数的个数,这里是一个,所以是String类型的一维数组。
如果还不明白,改一下代码,再看一下结果,这个就不详细说了,相信已经懂了。
代码:- array = new int[]{2,3};//数组类
- o = Array.newInstance(array.getClass(), 1, 1);//int型参数个数是2
- System.out.println(o.getClass().getName());
-
- s = "aaa";//非数组类
- o = Array.newInstance(s.getClass(), 1, 1);//int型参数个数是2
- System.out.println(o.getClass().getName());
复制代码 结果:
[[[I
[[Ljava.lang.String;
一个三维的int型数组;一个二维的String数组。 |