Я пытаюсь преобразовать некоторый код, который использует Unsafe для доступа к памяти для локальных переменных в классах, и кажется, что код также использует Unsafe для доступа к элементам в массиве.
У меня есть следующий кодсоздать VarHandle для отдельных элементов, и это, кажется, работает.
// where self is a class object, and VarName is the name of the class member
return MethodHandles.privateLookupIn(self, MethodHandles.lookup()).
findVarHandle(self, varName, self);
Я также читал, что вы также можете использовать VarHandle для доступа к элементам массива.Используя приведенный выше код, я могу получить ссылку на весь массив, но не могу понять, как сконструировать VarHandle так, чтобы я мог использовать его для доступа к элементам массива.
Я вижу, что MethodHandle имеетarrayElementVarHandle(int[].class)
, который возвращает VarHandle.Может быть, мне нужно каким-то образом преобразовать VarHandle обратно в MethodHandle и затем вызвать arrayElementVarHandle()
, чтобы это можно было сделать?