Suz*_*ioc 1 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
如何填充method变量以便它通过索引获取数组元素?
Java 不会向数组添加新方法。只有从数组中可用的方法是从类继承的方法Object,并且没有类似的方法array.get(index)可以通过以下方式使用:
method.invoke(array,index)\n这就是为什么反射包有实用程序类java.lang.reflect.Array,其中包含诸如 之类的方法public static Object get\xe2\x80\x8b(Object array, int index)以及诸如 之类的基本类型的重载版本public static int getInt\xe2\x80\x8b(Object array, int index)。它还包含相应的set(array, index, value)方法。
有了这些我们可以编写类似的代码
\nint[] array = new int[] {1, 2, 3};\nint element2 = Array.getInt(array, 2);//reflective way\n//or \n//int element2 = (int) Array.get(array, 2);//reflective way\nSystem.out.println(element2);\n int[] array = new int[] {1, 2, 3};\n Method method = ...................// something\n\n // int element2 = array[2]; // non-reflection version \n int element2 = (int) method.invoke(array, 2); // reflection version\n那么谜题的作者可能希望你反思地打电话Arrays.get(array,index)。换句话说method应该代表
Method method = Array.class.getDeclaredMethod("get", Object.class, int.class);\n但这也需要调用该方法 onArray.class或 on null(因为它是静态的),所以我们还需要修改
int element2 = (int) method.invoke(array, 2);\n并添加为第一个参数
\nint element2 = (int) method.invoke(Array.class, array, 2); // reflection version\n                                   ^^^^^^^^^^^\n或者
\nint element2 = (int) method.invoke(null, array, 2); // reflection version\n                                   ^^^^\n| 归档时间: | 
 | 
| 查看次数: | 2777 次 | 
| 最近记录: |