如何在 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 次瀏覽

開啟 職業生涯

透過完成課程獲得認證

開始
廣告