如何在 Java 9 中创建 VarHandle 的实例?


一般来说,变量句柄仅仅是变量的一个类型化引用。它将成为数组元素、类中的实例静态字段VarHandle 类可以在特定条件下提供对变量的读写访问。这些是不可变的,并且没有可见的条件。此外,它们不能进行子分类,并且每个 VarHandle 都有一个泛型类型 T,这是此 VarHandle 所表示的每个变量的类型。VarHandle 的目标是定义一个标准,以便在字段和数组元素上调用 java.util.concurrent.atomicsun.misc.Unsafe 操作的等效项。

在下例中,我们可使用 MethodHandle.lookup() 方法创建 VarHandle 实例。

示例

import java.lang.invoke.VarHandle;
import java.lang.invoke.MethodHandles;

public class VarHandleInstanceTest {
   public static void main(String args[]) {
      try {
         VarHandle fieldHandle = MethodHandles.lookup().in(Student.class).findVarHandle(Student.class, "studentId", int.class);
         System.out.println("VarHandle instance created successfully!!!");
      } catch (NoSuchFieldException | IllegalAccessException e) {
         e.printStackTrace();
      }
   }
}

// Stundent class
class Student {
   protected int studentId;
   private String[] marks;
   public Student() {
      studentId = 0 ;
      marks = new String[] {"75" , "85" , "95"} ;
   }
}

输出

VarHandle instance created successfully!!!

更新于:16-Apr-2020

155 次浏览

开启 职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.