Java反射 - 编辑数组长度

时间:2012-08-17 06:09:20

标签: java reflection

我想知道是否可以使用Java Reflection API更改为更改类的整数数组的长度。如果是这样,怎么样?

4 个答案:

答案 0 :(得分:2)

都能跟得上;创建一个固定长度的数组。

所做的事情是通过在更大数组中使用副本修改字段的值来实现的(使用{{3} }),只要你知道这样修改就不会造成任何不一致。

/* desired length */
final int desired = ...;
/* the instance of the object containing the int[] field */
final Object inst = ...;
/* the handle to the int[] field */
final Field field = ...;
field.set(inst, Arrays.copyOf((int[]) field.get(inst), desired));

答案 1 :(得分:2)

我认为即使使用Reflection也无法改变数组长度。

这是java教程的参考资料。

  

数组是一个容器对象,它包含固定数量的单个类型的值。创建数组时,将建立数组的长度。创建后,它的长度是固定的。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

答案 2 :(得分:1)

数组是固定长度的数据结构,因此无法修改它的长度。然而,人们可以使用新的固定长度创建一个新的数组,这样它就可以使用

来容纳新成员
  

System.arrayCopy()

就像你有一个类型为T的数组,大小为2,

  

T [] t1 =新T [2]

并且长度固定为2.因此它不能存储超过2个元素。但是通过使用新的固定长度创建新数组,比如5,

  

T [] t2 =新T [5]

所以它现在可以容纳5个元素。现在使用

将t1的内容复制到t2
  

System.arraycopy(Object src,int srcPos,Object dest,int destPos,int   长度)

在这个例子的例子中,

  

System.arraycopy(t1,0,t2,0,t1.length)

现在在新数组中,你有位置

  

从t1.length到t2.length-1

可供您使用。

答案 3 :(得分:0)

我猜java不允许你改变数组长度,但是你可以使用反射在索引处设置值。

 import java.lang.reflect.*;

 public class array1 {
  public static void main(String args[])
  {
     try {
        Class cls = Class.forName(
          "java.lang.String");
        Object arr = Array.newInstance(cls, 10);
        Array.set(arr, 5, "this is a test");
        String s = (String)Array.get(arr, 5);
        System.out.println(s);
     }
     catch (Throwable e) {
        System.err.println(e);
     }
  }
 }