假设我有
int[] array = new int[] {1, 2, 3};
Method method = // something
// int element2 = array[2]; // non-reflection version
int element2 = (int) method.invoke(array, 2); // reflection version
如何填充method
变量以使其按索引获取数组元素?
答案 0 :(得分:2)
作为类型的数组不添加任何方法,因此您可以在array
实例上调用的唯一方法是来自Object
类的方法。所以调用
method.invoke(array,index)
on array不能从数组返回元素,因为数组不提供这样的方法。
这就是在反射包中添加java.lang.reflect.Array
类的原因,因此您可以调用静态方法get(array,index)
int[] array = new int[] {1, 2, 3};
int element2 = (int) Array.get(array, 2);//reflective way
System.out.println(element2);
如果您坚持使用method.invoke
,则可以尝试使用
Method method = Array.class.getDeclaredMethod("get", Object.class, int.class);
int element2 = (int) method.invoke(Array.class, array, 2); // reflection version
^^^^^^^^^^^
但是这样你需要在invoke
方法参数的开头传递额外的参数,这些参数将代表调用此方法的类。由于此方法是静态的,因此您也可以将null
作为第一个参数传递
int element2 = (int) method.invoke(null, array, 2); // reflection version
^^^^
答案 1 :(得分:0)
尝试使用List
int[] array = new int[] { 1, 2, 3 };
// create a List and populate
List<Integer> list = new ArrayList<Integer>();
for (int i : array) {
list.add(i);
}
// use reflection method get/set on List
Method method = List.class.getDeclaredMethod("get", new Class[] { Integer.TYPE });
Object element2 = method.invoke(list, 2); // reflection version
System.out.println(element2); // output 3
get
方法。您可以尝试使用List
。List