Java 如何获取/设置具有反射的数组元素?
如果我有Java 如何获取/设置具有反射的数组元素?,java,arrays,reflection,Java,Arrays,Reflection,如果我有 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 如何填充方法变量,使其按索引获取数组元素?回答标题中的问题: Java不会向数组添加新方法。数组中唯一可
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
如何填充方法
变量,使其按索引获取数组元素?回答标题中的问题:
Java不会向数组添加新方法。数组中唯一可用的方法是从对象
类继承的方法,没有类似于array.get(index)
的方法,我们可以通过以下方式使用它们:
method.invoke(array,index)
这就是反射包具有实用程序类的原因,该类包含类似的方法以及类似的基元类型的重载版本。它还包含相应的集合(数组、索引、值)
方法
有了这些,我们可以像这样编写代码
int[] array = new int[] {1, 2, 3};
int element2 = Array.getInt(array, 2);//reflective way
//or
//int element2 = (int) Array.get(array, 2);//reflective way
System.out.println(element2);
但是,如果你的问题的目标是解决难题,我们需要填补空白,让下面的代码工作 然后,拼图的作者可能希望您反射性地调用
array.get(array,index)
。换句话说,方法
应该代表
Method method = Array.class.getDeclaredMethod("get", Object.class, int.class);
但这也需要在Array.class
或null
上调用该方法(因为它是静态的),因此我们还需要修改
int element2 = (int) method.invoke(array, 2);
并添加为第一个参数
int element2 = (int) method.invoke(Array.class, array, 2); // reflection version
^^^^^^^^^^^
或
回答标题中的问题:
Java不会向数组添加新方法。数组中唯一可用的方法是从对象
类继承的方法,没有类似于array.get(index)
的方法,我们可以通过以下方式使用它们:
method.invoke(array,index)
这就是反射包具有实用程序类的原因,该类包含类似的方法以及类似的基元类型的重载版本。它还包含相应的集合(数组、索引、值)
方法
有了这些,我们可以像这样编写代码
int[] array = new int[] {1, 2, 3};
int element2 = Array.getInt(array, 2);//reflective way
//or
//int element2 = (int) Array.get(array, 2);//reflective way
System.out.println(element2);
但是,如果你的问题的目标是解决难题,我们需要填补空白,让下面的代码工作 然后,拼图的作者可能希望您反射性地调用
array.get(array,index)
。换句话说,方法
应该代表
Method method = Array.class.getDeclaredMethod("get", Object.class, int.class);
但这也需要在Array.class
或null
上调用该方法(因为它是静态的),因此我们还需要修改
int element2 = (int) method.invoke(array, 2);
并添加为第一个参数
int element2 = (int) method.invoke(Array.class, array, 2); // reflection version
^^^^^^^^^^^
或
尝试使用
列表
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
int[]数组=新的int[]{1,2,3};
//创建一个列表并填充
列表=新的ArrayList();
for(int i:array){
列表.添加(i);
}
//使用反射方法获取/设置列表
Method=List.class.getDeclaredMethod(“get”,新类[]{Integer.TYPE});
Object element2=方法.调用(列表,2);//反射版本
System.out.println(元素2);//产出3
- 数组没有任何
方法。您可以尝试使用get
列表
- 最后,您可以从
列表
列表
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
int[]数组=新的int[]{1,2,3};
//创建一个列表并填充
列表=新的ArrayList();
for(int i:array){
列表.添加(i);
}
//使用反射方法获取/设置列表
Method=List.class.getDeclaredMethod(“get”,新类[]{Integer.TYPE});
Object element2=方法.调用(列表,2);//反射版本
System.out.println(元素2);//产出3
- 数组没有任何
方法。您可以尝试使用get
列表
- 最后,您可以从
列表
Method
返回数组的元素您不能有一个将数组作为第一个参数的自定义方法。您可以使用MethodHandles和闭包,但不能使用普通方法。您可以执行method.invoke(null,array,2)代码>改为。请查看我的更新。我希望Method
返回数组的元素您不能有一个将数组作为第一个参数的自定义方法。您可以使用MethodHandles和闭包,但不能使用普通方法。您可以执行method.invoke(null,array,2)
相反。但是OP正在查找或方法.invoke()
否则这也是一个答案数组[2]
这不是方法
,而get
是静态的。所以,没有(非静态)方法可以获取数组的元素?但OP正在查找或method.invoke()
,否则这也是一个答案array[2]
这不是method
,而get
是静态的。所以,没有(非静态)方法可以获得数组的元素?