gpt4 book ai didi

java - 如何通过反射获取/设置数组元素?

转载 作者:行者123 更新时间:2023-11-30 03:54:49 25 4
gpt4 key购买 nike

假设我有

 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变量以便它通过索引获取数组元素?

最佳答案

回答标题中的问题:

Java 不会向数组添加新方法。数组中唯一可用的方法是从 Object 类继承的方法,并且没有像 array.get(index) 这样我们可以通过以下方式使用的方法:

method.invoke(array,index)

这就是为什么反射包有实用程序类 java.lang.reflect.Array ,其中包含类似 public static Object get​(Object array, int index) 的方法以及基本类型的重载版本,例如 public static int getInt​(Object array, int index) 。它还包含相应的 set(array, index, value) 方法。

有了这些我们就可以编写类似的代码

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);
<小时/>

但是,如果您的问题的目标是解决难题,我们需要填补空白并让下面的代码起作用

 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

那么谜题的作者可能希望你反射(reflection)性地调用Arrays.get(array,index)。换句话说方法应该代表

Method method = Array.class.getDeclaredMethod("get", Object.class, int.class);

但这还需要在 Array.classnull 上调用该方法(因为它是静态的),因此我们还需要修改

int element2 = (int) method.invoke(array, 2);

并添加为第一个参数

int element2 = (int) method.invoke(Array.class, array, 2); // reflection version
^^^^^^^^^^^

或者

int element2 = (int) method.invoke(null, array, 2); // reflection version
^^^^

关于java - 如何通过反射获取/设置数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23500237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com