Java 高级教程系列 - 数组反射

Java Tutorial for Language Adavanced - Array Reflection

Posted by zihengCat on 2019-03-28

数组反射(Array Reflection)

数组(Array)是 Java 语言中一个比较特殊的存在,但其仍是对象。对于数组对象的反射操作,主要由java.lang.reflect.Array提供。Array类提供一系列静态方法允许我们动态创建与操作 Java 数组,注意,Array类中的所有方法都是静态方法。

public final class Array
extends Object

代码清单:Array类声明

通过反射动态创建数组对象,我们需要使用Array类的newInstance()重载方法,该方法有两个版本,分别用来创建一维数组与多维数组。Class类提供isArray()方法检测反射类是否为数组类型。

Object newInstance(Class<?> componentType, int length)
Object newInstance(Class<?> componentType, int... dimensions)

代码清单:数组(Array)类newInstance()重载方法声明

方法 描述
Object newInstance(Class<?> componentType, int length) 根据元素类型与长度动态创建数组对象。
Object newInstance(Class<?> componentType, int... dimensions) 根据元素类型与维度动态创建多维数组对象。
int getLength(Object array) 获取目标数组的长度。
Object get(Object array, int index) 获取目标数组下标元素。
void set(Object array, int index, Object value) 设置目标数组下标元素。

表:数组(Array)反射 API 表

import java.lang.reflect.Array;
import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        /* Create an array of int of length 2 */
        int[] arrayOfInt = (int[])Array.newInstance(int.class, 2);
        /* Print the values in array element
           Default values will be zero */
        System.out.println(Arrays.toString(arrayOfInt));
        int a_0 = (int)Array.get(arrayOfInt, 0);
        int a_1 = (int)Array.get(arrayOfInt, 1);
        System.out.printf("a[0] = %d, a[1] = %d\n", a_0, a_1);
        /* Set the values for array */
        Array.set(arrayOfInt, 0, 101);
        Array.set(arrayOfInt, 1, 102);
        /* Print the values in array element again */
        System.out.println(Arrays.toString(arrayOfInt));
    }
}

代码清单:Array类反射运用示例

参考资料