2

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

4

4 回答 4

3

没有; 创建一个固定长度的数组。

可以做的是通过使用较大数组中的副本(使用)修改字段的值来接近,只要您知道这样的修改不会导致任何不一致。Arrays.copyOf

/* 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));
于 2012-08-17T06:16:11.190 回答
2

我认为即使使用反射也无法更改数组长度。

这是java教程的参考。

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

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

于 2012-08-17T06:19:45.247 回答
1

数组是一个固定长度的数据结构,所以它的长度是不可能被修改的。尽管如此,人们可以创建一个具有新固定长度的新数组,这样它可以容纳新成员使用

System.arrayCopy()

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

T[] t1 = 新 T[2]

它的长度固定为2。所以它不能存储超过2个元素。但是通过创建具有新的固定长度的新数组,比如 5,

T[] t2 = 新 T[5]

所以它现在可以容纳 5 个元素。现在将 t1 的内容复制到 t2 使用

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

在本例中,

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

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

从 t1.length 到 t2.length-1

可供您使用。

于 2012-08-17T06:34:22.380 回答
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);
     }
  }
 }
于 2012-08-17T06:21:06.620 回答