Java反射 - 编辑数组的长度(Java Reflection - Editing Array L

2019-09-21 07:43发布

我想知道是否有可能改改使用Java反射API类的整数数组的长度。 如果是这样,怎么样?

Answer 1:

不; 的阵列具有固定长度创建。

可以做的就是附近(使用修改较大的阵列领域的一个副本中的值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));


Answer 2:

我不认为这是可以改变数组长度甚至反思。

这是从Java教程的参考。

阵列是保持单一类型的值的固定数目的容器对象。 在创建阵列时的阵列的长度被建立。 创建后,它的长度是固定的。

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



Answer 3:

阵列是一个固定长度的数据结构,所以没有办法,它的长度将被修改。 然而,人们可以创建具有以这样的方式一个新的固定长度的新数组它可以使用容纳新成员

System.arrayCopy()

它像您有T类型的阵列的2的大小,

T [] T1 =新T [2]

并且它是长度固定有2。所以它不能存储大于2种元素的任何更多。 但通过创建一个新的固定长度的新的数组,说5,

T [] T2 =新T [5]

因此,现在可以容纳5个元素。 现在复制T1的内容使用到t2

System.arraycopy(对象SRC,INT srcPos,对象DEST,整数destPos,INT长度)

在这种情况下的例子的,

System.arraycopy(T1,0,T2,0,t1.length)

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

从t1.length到t2.length-1

是供您使用。



Answer 4:

我想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);
     }
  }
 }


文章来源: Java Reflection - Editing Array Length