我想知道是否可以使用Java Reflection API更改为更改类的整数数组的长度。如果是这样,怎么样?
答案 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的内容复制到t2System.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);
}
}
}