我不熟悉invoke API,所以对这个答案持保留态度,但是为什么不能直接使用
VarHandle
退回人
MethodHandles.arrayElementVarHandle
? 执行以下操作似乎可以访问元素:
import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
VarHandle varHandle = MethodHandles.arrayElementVarHandle(int[].class);
int[] array = new int[5];
printArray(array);
varHandle.set(array, 2, 5);
printArray(array);
System.out.println(varHandle.get(array, 2));
}
private static void printArray(int[] array) {
System.out.println(Arrays.toString(array));
}
}
输出:
[0, 0, 0, 0, 0]
[0, 0, 5, 0, 0]
5