import java.lang.reflect.Array;
public class ArrayTester1
{
public static void main(String[] args) throws Exception
{
Class<?> classType = Class.forName("java.lang.String");
//生成数组,指定元素类型和数组长度
Object array = Array.newInstance(classType, 10);
Array.set(array, 5, "hello");
String str = (String)Array.get(array, 5);
System.out.println(str);
}
}
System.out.println(Integer.TYPE);
System.out.println(Integer.class);
import java.lang.reflect.Array;
public class ArrayTester2
{
public static void main(String[] args)
{
int[] dims = new int[] { 5, 10, 15 };
// 注意区分下面两种
System.out.println(Integer.TYPE); // int
System.out.println(Integer.class); // Integer
// 创建一个三维数组,这个数组的三个维度分别是5,10,15
Object array = Array.newInstance(Integer.TYPE, dims);
// 可变参数,也可以这样写:
// Object array = Array.newInstance(Integer.TYPE, 5,10,15);
System.out.println(array instanceof int[][][]);
Class<?> classType0 = array.getClass().getComponentType(); // 返回数组元素类型
System.out.println(classType0); // 三维数组的元素为二维数组,输出:class [[I
// 获得第一层的索引为3的数组,返回的是一个二维数组
Object arrayObject = Array.get(array, 3);
Class<?> classType = arrayObject.getClass().getComponentType(); // 返回数组元素类型
System.out.println(classType); // 二维数组的元素为一维数组,输出:class [I
// 此处返回的是一个一维数组
arrayObject = Array.get(arrayObject, 5);
Class<?> classType2 = arrayObject.getClass().getComponentType(); // 返回数组元素类型
System.out.println(classType2); // 一维数组的元素为int
// 给一维数组下标为10的位置设置值为37
Array.setInt(arrayObject, 10, 37);
int[][][] arrayCast = (int[][][]) array;
System.out.println(arrayCast[3][5][10]);
}
}
数组反射
如果因为某种原因,您并不确定参数或对象是不是数组,您可以检索对象的 Class 对象并询问它。 Class 类的 isArray() 方法将会告诉您。一旦您知道拥有了一个数组,您可以询问 Class 的 getComponentType() 方法,您实际拥有的是什么类型的数组。如果 isArray() 方法返回 false,那么 getComponentType() 方法返回空。否则返回元素的 Class 类型。如果数组是多维的,您可以递归调用 isArray() 。它将仍只包含一个 component 类型。此外,您可以用在 java.lang.reflect 包里找到的 Array 类的 getLength() 方法获取数组的长度。
public void recurse(Object arr)
{
if (arr.getClass().isArray())
{
for (int i=0;i<Array.getLength(arr);i++)
{
boolean check=false;
try{
check=Array.get(arr,i).getClass().isArray();
}catch(Exception e){}
if (check) recurse(Array.get(arr,i));
else sum+=Array.getInt(arr,i);
}
}
System.out.println(sum);
}