反射学习4-通过反射机制动态创建和访问数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射学习4-通过反射机制动态创建和访问数组相关的知识,希望对你有一定的参考价值。

一、前言
java.lang.reflect.Array类提供了动态创建和访问数组元素的各种静态方法。

static Object
   newInstance(Class<?> componentType, int... dimensions)
创建一个具有指定的组件类型和维度的新数组。componentType:组件类型,Java中将数组的数组也就是二维数组当做一个组件。

static Object
get(Object array, int index)
返回指定数组对象中索引组件的值。

static void
set(Object array, int index, Object value)
将指定数组对象中索引组件的值设置为指定的新值。

二、以下是几个Array的实例

   调用Array的newInstance()方法创建数组:

一维数组:

Class classType = Class.forName("java.lang.String");
Object array = Array.newInstance(classType, 10);

多维数组:

Class classType = Class.forName("java.lang.String");
int[] dimension = new int[]{10,10,10};
Object array2_3d = Array.newInstance(classType, dimension);

调用Array的get()方法获取数组的值:

一维数组:

System.out.println((String)Array.get(array, 1));

多维数组:

Class classType = Class.forName("java.lang.String");
int[] dimension = new int[]{10,10,10};
Object array2_3d = Array.newInstance(classType, dimension);
//获取三维数组的第一个数组组件array2Obj,是一个二维数组
Object array2Obj_2d = Array.get(array2, 1);
//获取array2Obj_2的第二个数组组件,是一个一维数组
Object array2Obj_1d = Array.get(array2Obj_2d, 2);

调用Array的set()方法设置数组的值:

一维数组:

Array.set(array, 1, "arthinking");

多维数组:

Array.set(array2Obj_1d, 3, "arthinking");

完整代码如下
一维数组,创建一个一维数组并设置第一个元素的值:

Class classType = Class.forName("java.lang.String");
Object array = Array.newInstance(classType, 10);
Array.set(array, 1, "arthinking");
System.out.println((String)Array.get(array, 1));

多维数组,创建一个三维数组并设置元素array[1][2][3]的值:

Class classType = Class.forName("java.lang.String");
int[] dimension = new int[]{10,10,10};
Object array2_3d = Array.newInstance(classType, dimension);
//获取三维数组的第一个数组组件array2Obj,是一个二维数组
Object array2Obj_2d = Array.get(array2_3d, 1);
//获取array2Obj_2的第二个数组组件,是一个一维数组
Object array2Obj_1d = Array.get(array2Obj_2d, 2);
//设置array2Obj_1的第三个元素的值
Array.set(array2Obj_1d, 3, "arthinking");
//从三维数组array2中获取刚才设置的值
System.out.println(((String[][][])array2_3d)[1][2][3]);

//获取array2Obj_2d的组件类型
Class<?> classType2 = array2Obj_2d.getClass().getComponentType();

以上是关于反射学习4-通过反射机制动态创建和访问数组的主要内容,如果未能解决你的问题,请参考以下文章

Java Review(三十九类加载机制与反射)

Java学习总结(十四)——java反射机制,利用反射动态创建对象

反射学习

Android组件化架构 - 4. 动态创建 & 反射机制

Java 反射机制

反射学习2-通过反射机制动态获取属性的值模拟Struts的自动赋值