首发于 Java专栏

《Java面向对象编程》导读-利用Java反射机制动态创建和访问数组

java.lang.Array类提供了动态创建和访问数组元素的各种静态方法:

  • newInstance():创建数组对象。
  • set():给数组的特定元素赋值。
  • get():读取数组的特定元素的值。

例程1的ArrayTest1类的main()方法创建了一个长度为20的字符串数组,接着把索引位置为5的元素设为“hello”,然后再读取索引位置为5的元素的值。

例程1 ArrayTest1.java

import java.lang.reflect.*;
public class ArrayTest1 {
  public static void main(String args[])throws Exception {
    //创建一个长度为20的字符串数组
    Object array = Array.newInstance(String.class, 20);
    //把索引位置为5的元素设为"hello"
    Array.set(array, 5, "hello");
    //读取索引位置为5的元素的值
    String s = (String) Array.get(array, 5);
    System.out.println(s);     //打印hello
    //获取数组的元素的类型
    Class<?> elementType =
               array.getClass().getComponentType();
    //打印java.lang.String
    System.out.println(elementType.getName()); 
}

当Class对象表示数组类型,它的getComponentType()方法返回的Class对象表示数组中元素的类型。

例程2的ArrayTest2类的main()方法创建了一个 10X20的double类型的二维数组,并把索引位置为[3][5] 的元素的值设为66.22。

例程2 ArrayTest2.java

import java.lang.reflect.*;
public class ArrayTest2{
  public static void main(String args[]) {
    int dims[] = new int[]{10, 20};
    Object array = Array.newInstance(double.class, dims);
    //返回array[3]
    Object array3 = Array.get(array, 3);
    //把元素array[3][5]设为66.22