为什么需要使用Java Reflection创建数组元素

时间:2015-03-22 10:05:58

标签: java arrays

有人会写这样的代码:

int[] intArray = (int[]) Array.newInstance(int.class, 3);
Array.set(intArray, 0, 123);
Array.set(intArray, 1, 456);
Array.set(intArray, 2, 789);
System.out.println("intArray[0] = " + Array.get(intArray, 0));
System.out.println("intArray[1] = " + Array.get(intArray, 1));
System.out.println("intArray[2] = " + Array.get(intArray, 2));

我想问为什么我需要修改这样的数组而不是:

intArray [0] = 123;

intArray [1] = 456;

intArray [2] = 789;

2 个答案:

答案 0 :(得分:2)

您提供的代码背后没有动力,它可以全部替换为本机数组语法。 Array类仅对编译时未知组件类型的数组的通用处理有用。

一个简单的例子可能是解析一些有线格式,你可能有一个辅助方法,如:

public Object toArray(Class<?> componentType, int size, Parser p) {
   Object array = Array.newInstance(componentType, size);
   for (int i = 0; i < size; i++) 
      Arrays.set(array, i, p.nextItem());
   return array;
}

答案 1 :(得分:2)

  

我想问为什么我需要修改这样的数组......

您通常不需要这样做。如果你不需要,你就不应该!

但是假设您正在编写代码以基于(例如)XML或JSON中的描述创建和初始化任意Java数据结构。在这种情况下,您可以编写反射代码,以更通用的方式执行此类操作......构建数据结构。