語言

VarHandle 類別

定義

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

[Android.Runtime.Register("java/lang/invoke/VarHandle", ApiSince=33, DoNotGenerateAcw=true)]
public abstract class VarHandle : Java.Lang.Object
[<Android.Runtime.Register("java/lang/invoke/VarHandle", ApiSince=33, DoNotGenerateAcw=true)>]
type VarHandle = class
    inherit Object
繼承
屬性

備註

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。 在多種 <em>存取模式</em> 下,支援對此類變數的存取,包括純讀寫存取、揮發性讀寫存取,以及比較與設定。

變態handle是不可變的,且沒有可見的狀態。 使用者無法對變種柄進行子類別化。

一個 VarHandle 包含:ul<li a T,即此 VarHandle 所參考的每個變數的型別;以及 >li<是一個>#varType variable type列表,為 em<的座標表達>式/em#coordinateTypes coordinate typesCT1, CT2, ..., CTn別,共同定位該 VarHandle 所參考的變數。<><> </ul> 變數型與座標型態可以是原始型或參考型,並以 Class 物件表示。 座標類型清單可能為空。

產生或 java.lang.invoke.MethodHandles.Lookup lookup VarHandle 實例的工廠方法會記錄支援的變數類型及座標類型清單。

每個存取模式都對應一個 <em>存取模式方法</em>,這是一種以存取模式命名的簽名多態方法。 當存取模式方法在 VarHandle 實例中被呼叫時,呼叫的初始參數是座標表達式,精確指示該變數要在哪個物件中被存取。 呼叫後方的參數代表存取模式中重要的值。 例如,各種比較與設定或比較與交換存取模式需要兩個後置參數,分別表示變數的期望值與新值。

存取模式方法呼叫參數的元數與類型不會靜態檢查。 取而代之的是,每個存取模式方法指定一個 #accessModeType(AccessMode) access mode type,以 的 MethodType實例表示,作為一種方法簽名,並以動態方式檢查參數。 存取模式類型提供正式的參數類型,例如VarHandle實例的座標類型以及對存取模式重要值的類型。 存取模式類型也會提供回傳類型,通常以 VarHandle 實例的變數類型表示。 當存取模式方法在 VarHandle 實例中被呼叫時,呼叫站點的符號型別描述符、呼叫參數的執行時間型別,以及回傳值的執行型別,必須與存取模式型別中給出的型別相符。 若匹配失敗,將拋出執行時例外。

例如,存取模式方法 #compareAndSet 指定若其接收端為 VarHandle 實例,且座標類型 CT1, ..., CTn 與變數類型 T為 ,則其存取模式類型為 (CT1 c1, ..., CTn cn, T expectedValue, T newValue)boolean。 假設一個 VarHandle 實例可以存取陣列元素,且其座標型別為 String[]int ,而變數型別為 String。 在這個 VarHandle 實例中,存取 compareAndSet 模式類型為 (String[] c1, int c2, String expectedValue, String newValue)boolean。 這樣的 VarHandle 實例可由 MethodHandles#arrayElementVarHandle(Class) array factory method 和 存取陣列元素以以下方式產生:

{@code
            String[] sa = ...
            VarHandle avh = MethodHandles.arrayElementVarHandle(String[].class);
            boolean r = avh.compareAndSet(sa, 10, "expected", "new");
            }

存取模式控制原子性與一致性屬性。 <em>純/<em> 讀取(get)與寫入(set)存取保證僅在參考及最多32位元的原始值時為位元原子,且對執行執行緒以外的執行緒不施加可觀察的排序限制。 <em>不透明</em> 操作是位元原子且相對於同一變數的存取順序一致排列的。 除了遵守不透明屬性外, <em>獲取</em> 模式的讀取及其後續存取的排序,是根據 <em>Release</em> 模式寫入與先前存取匹配而排序。 除了遵守取得與釋放性質外,所有 <em>Volatile</em> 操作彼此間皆完全有序。

存取模式分為以下類別: <ul><li>讀取存取模式,透過特定記憶體排序效果取得變數的值。 屬於此組的對應存取模式方法集合包括 #get get#getVolatile getVolatile#getAcquire getAcquire#getOpaque getOpaque。 <LI>寫入存取模式,設定變數值在指定的記憶體排序效果下。 屬於此組的對應存取模式方法集合包括 #set set#setVolatile setVolatile#setRelease setRelease#setOpaque setOpaque。 <LI>Atomic Update 存取模式,例如原子比較並設定變數值,符合指定的記憶體排序效果。 屬於此組的對應存取模式方法集合包括 #compareAndSet compareAndSet#weakCompareAndSetPlain weakCompareAndSetPlain#weakCompareAndSet weakCompareAndSet#weakCompareAndSetAcquire weakCompareAndSetAcquire#weakCompareAndSetRelease weakCompareAndSetRelease#compareAndExchangeAcquire compareAndExchangeAcquire#compareAndExchange compareAndExchange#compareAndExchangeRelease compareAndExchangeRelease#getAndSet getAndSet#getAndSetAcquire getAndSetAcquire#getAndSetRelease getAndSetRelease <LI>數值原子更新存取模式,例如,根據指定的記憶體排序效果,原子性地取得並加上變數的值。 屬於此組的對應存取模式方法集合包括#getAndAdd getAndAdd方法、#getAndAddAcquire getAndAddAcquire#getAndAddRelease getAndAddRelease<、每點>元原子更新存取模式,例如原子取得,且在指定記憶體排序效應下,或位元或值。 屬於此組的對應存取模式方法集合包括 #getAndBitwiseOr getAndBitwiseOr#getAndBitwiseOrAcquire getAndBitwiseOrAcquire#getAndBitwiseOrRelease getAndBitwiseOrRelease#getAndBitwiseAnd getAndBitwiseAnd#getAndBitwiseAndAcquire getAndBitwiseAndAcquire#getAndBitwiseAndRelease getAndBitwiseAndRelease#getAndBitwiseXor getAndBitwiseXor, 。 #getAndBitwiseXorAcquire getAndBitwiseXorAcquire#getAndBitwiseXorRelease getAndBitwiseXorRelease </ul>

產生或 java.lang.invoke.MethodHandles.Lookup lookup VarHandle 實例的工廠方法會記錄所支援的存取模式集合,這些模式也可能包含基於變數類型及變數是否唯讀的限制。 若不支援存取模式,則對應的存取模式方法會在調用時拋出一個 UnsupportedOperationException。 工廠方法應記錄存取模式方法可能拋出的任何額外未宣告例外。 所有 VarHandle 實例都支援存取 #get get 模式,且對應的方法從未拋 UnsupportedOperationException出 。 若 VarHandle 參考唯讀變數(例如欄位 final ),則不支援寫入、原子更新、數值原子更新及位元原子更新存取模式,對應方法會拋出 UnsupportedOperationException。 除 和 get之外,讀寫存取模式(若支援set)提供參考型態及所有原始型態的原子存取。 除非工廠方法的文件另有說明,存取模式 get 和(若支援)提供參考型態及所有原語類型的原子存取,且在 32 位元平台上除外setlongdouble

存取模式會覆寫變數宣告站點所指定的記憶體排序效果。 例如,一個 VarHandle 使用 存取get模式存取欄位時,即使該欄位被宣告為 <,也會依照其存取模式>/em< 指定的>volatile欄位存取該欄位。 在執行混合存取時,應格外謹慎,因為 Java 記憶體模型可能帶來令人驚訝的結果。

除了支援在各種存取模式下存取變數外,還提供了一組靜態方法,稱為記憶體圍欄方法,用於細緻控制記憶體排序。

Java 語言規範允許其他執行緒觀察操作,彷彿其執行順序與程式原始碼中明顯不同,但受限於例如鎖、volatile欄位或 VarHandle 等限制。 靜態方法#fullFence fullFence、 、 #acquireFence acquireFence#releaseFence releaseFence#loadLoadFence loadLoadFence#storeStoreFence storeStoreFence,也可用來施加約束。 他們的規格,如同某些存取模式,以缺乏「重新排序」的說法——這些可觀察到的排序效應,若沒有圍欄存在,可能會發生。 未來 Java 語言規範的更新,可能會更精確地說明存取模式方法與記憶體圍欄方法的規範。

<h1>編譯存取模式方法<的調用/h1> Java 方法呼叫式命名存取模式方法,可以從 Java 原始碼調用 VarHandle。 從原始碼的角度來看,這些方法可以接受任意參數,且其多型結果(若有表達)可轉換為任意回傳類型。 形式上,這是透過賦予存取模式方法可變元 Object 數參數和 Object 返回類型(若返回類型為多態性)來實現,但它們還有一項額外的特性稱為 <em>signature polymorphism</em> ,將這種調用自由直接連結到 JVM 執行堆疊。

如同虛擬方法通常,存取模式方法的原始碼層呼叫會編譯成指令 invokevirtual 。 較為特殊的是,編譯器必須記錄實際的參數類型,且不得對參數進行方法調用轉換。 相反地,它必須產生指令,根據它們自身未轉換的型別推送到堆疊中。 VarHandle 物件本身會在參數之前被推送到堆疊上。 編譯器接著產生 invokevirtual 一條指令,呼叫存取模式方法,並以符號型別描述子描述參數與回傳型別。

要產生完整的符號型別描述符,編譯器還必須確定回傳型別(若為多型)。 這是基於對方法呼叫表達式的鑄造(如果有的話)、 Object 如果呼叫是表達式,或 void 是呼叫是陳述式。 鑄造可能屬於原始型(但不 void一定)。

作為一個角落情況,未鑄造null的參數會被賦予一個符號型描述子。java.lang.Void 與型別 Void 的歧義無害,因為除了空參考外,沒有其他型別 Void 的參考。

<h1>「invoke」>執行存取模式方法<的呼叫/h1> 指令首次 invokevirtual 執行時,透過符號方式解析指令中的名稱並驗證方法呼叫是否靜態合法來連結指令。 這對於存取模式方法的呼叫同樣適用。 此時,編譯器所發出的符號型別描述符會被檢查語法是否正確,並解析其包含的名稱。 因此,只要符號型別描述符語法正確且型別存在,呼叫 invokevirtual 存取模式方法的指令就會自動連結。

當 在連結後執行時 invokevirtual ,JVM 會先檢查接收端 VarHandle 的存取模式類型,以確保其與符號型別描述符相符。 若型別匹配失敗,表示呼叫者所呼叫的存取模式方法不存在於被呼叫的個別變式處理中。

存取模式方法的調用行為類似於調用 MethodHandle#invoke,且接收方法的 handle 接受 VarHandle 實例作為首參數。 更具體地說,以下 {access-mode} 對應存取模式方法名稱:

{@code
            VarHandle vh = ..
            R r = (R) vh.{access-mode}(p1, p2, ..., pN);
            }

行為如下:

{@code
            VarHandle vh = ..
            VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
            MethodHandle mh = MethodHandles.varHandleExactInvoker(
                                  am,
                                  vh.accessModeType(am));

            R r = (R) mh.invoke(vh, p1, p2, ..., pN)
            }

(模存取模式方法不宣稱拋出 )。Throwable 這相當於:

{@code
            MethodHandle mh = MethodHandles.lookup().findVirtual(
                                  VarHandle.class,
                                  "{access-mode}",
                                  MethodType.methodType(R, p1, p2, ..., pN));

            R r = (R) mh.invokeExact(vh, p1, p2, ..., pN)
            }

其中所需的方法類型是符號型別描述符,執行 A MethodHandle#invokeExact ,因為在呼叫目標之前,handle 會根據需要套用參考鑄造,並對原始值進行盒裝、解框或擴大,就像由 ( MethodHandle#asType asTypeMethodHandles#varHandleInvoker見 )。

更簡潔地說,這種行為等價於:

{@code
            VarHandle vh = ..
            VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
            MethodHandle mh = vh.toMethodHandle(am);

            R r = (R) mh.invoke(p1, p2, ..., pN)
            }

在此情況下,方法的 handle 綁定為 VarHandle 實例。

<h1>呼叫檢查</h1> 在典型程式中,VarHandle 存取模式類型匹配通常會成功。 但如果配對失敗,JVM 會拋出 WrongMethodTypeException

因此,存取模式類型不匹配,可能在靜態型別程式中表現為連結錯誤,但在使用 VarHandle 的程式中則會顯示為動態 WrongMethodTypeException

由於存取模式類型包含「活」 Class 物件,方法類型匹配會同時考量型別名稱與類別載入器。 因此,即使一個 VarHandle VH 在一個類別載入器中建立並在另一個L1類別載入器L2中使用,VarHandle 存取模式的方法呼叫仍然是型別安全的,因為呼叫者的符號型別描述符(如在 L2中解析)會與原始被被召方方法的符號型別描述符(如在 中解析L1)相匹配。 當 建立 並指派存取模式類型時,中的 L1 解析會發生 VH ;而 的 L2 解算則是在 invokevirtual 指令被連結時發生。

除了型別描述符檢查外,VarHandles 存取變數的能力是無限制的。 如果一個有權限存取該變數的類別在非公開變數上建立 VarHandle,任何收到該變數引用的呼叫者都可以在任何地點使用該 VarHandle。

與核心反射 API 不同,後者每次呼叫反射方法時都會檢查存取,而 VarHandle 存取檢查是在建立 VarHandle 時執行的。 因此,對非公開變數或非公開類別變數的 VarHandle 通常應保持秘密。 除非使用這些程式碼本身無害,否則不應被傳遞給不受信任的程式碼。

<h1>VarHandle 建立</h1> Java 程式碼可以建立一個 VarHandle,直接存取該程式碼可存取的任何欄位。 這是透過一個稱為 java.lang.invoke.MethodHandles.Lookup MethodHandles.Lookup. 的反射性、基於能力的 API 來完成的。 例如,非靜態欄位的 VarHandle 可由 取得 java.lang.invoke.MethodHandles.Lookup#findVarHandle Lookup.findVarHandle。 還有一種從 Core Reflection API 物件轉換的方法,。 java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle Lookup.unreflectVarHandle

存取受保護欄位成員的權限僅限於存取類別或其子類別的接收者,而存取類別必須是受保護成員定義類別的子類別(或封包兄弟姊妹)。 如果 VarHandle 指的是宣告類別中受保護且非靜態的欄位,且該欄位位於目前封包之外,接收者參數會被縮小到存取類別的類型。

<h1>VarHandles 與核心反射 API< 之間的互通/h1> 利用 API 中的 java.lang.invoke.MethodHandles.Lookup Lookup 工廠方法,任何由核心反射 API 物件所代表的欄位都可以轉換為行為等效的 VarHandle。 例如,反射物 java.lang.reflect.Field Field 可以用 轉換成 VarHandle java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle Lookup.unreflectVarHandle。 產生的 VarHandle 通常能提供更直接且高效的底層欄位存取。

作為一個特殊情況,當使用 Core Reflection API 來檢視此類別中的簽名多態存取模式方法時,它們看起來就像一般的非多態性方法。 它們在 所 java.lang.Class#getDeclaredMethod Class.getDeclaredMethod見的反射外觀,不受其在此 API 中的特殊地位影響。 例如, java.lang.reflect.Method#getModifiers Method.getModifiers 會精確回報任何類似宣告方法所需的修飾位元,包括此例 native 中的 和 varargs 位元。

如同任何反射方法,這些方法(當被反射時)可直接透過 java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke,透過 JNI 呼叫,或間接透過 java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect。 然而,這類反射呼叫不會產生存取模式方法的呼叫。 若此呼叫傳遞所需的參數(一個型別 Object[]為 的 參數),將忽略該參數並拋出一個 UnsupportedOperationException

由於 invokevirtual 指令可在任何符號型別描述符下原生調用 VarHandle 存取模式方法,這種反思觀點與這些方法通常以位元組碼呈現方式相衝突。 因此,當這些原生方法從 中反思來看 Class.getDeclaredMethod,可視為僅為佔位符。

為了取得特定存取模式類型的調用者方法,請使用 java.lang.invoke.MethodHandles#varHandleExactInvokerjava.lang.invoke.MethodHandles#varHandleInvoker。 API java.lang.invoke.MethodHandles.Lookup#findVirtual Lookup.findVirtual 也能回傳方法句柄,呼叫任意指定的存取模式方法,且其行為等同 java.lang.invoke.MethodHandles#varHandleInvoker於 。

<h1>VarHandles 與 Java generics< 之間的互通 / h1> 可以為變數(例如欄位)取得一個 VarHandle,該變數以 Java generic 類型宣告。 與核心反射 API 類似,變數 Handle 的變數類型將由原始碼層級型別的擦除構成。 當呼叫 VarHandle 存取模式方法時,其參數的型別或回傳值鑄造型別可能是通用型態或型別實例。 若發生這種情況,編譯器會在建構指令符號型別描述符 invokevirtual 時,將其替換為這些型別的擦除值。

新增9。

Java 文件 java.lang.invoke.VarHandle

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

建構函式

名稱 Description
VarHandle(IntPtr, JniHandleOwnership)

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

屬性

名稱 Description
Class

回傳此 Object的執行時類別。

(繼承來源 Object)
Handle

底層 Android 實例的帳號。

(繼承來源 Object)
JniIdentityHashCode

取得由互通執行時指派給此 Java 對等端的身份雜湊碼。

(繼承來源 Object)
JniManagedPeerState

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

(繼承來源 JavaObject)
JniPeerMembers

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

PeerReference

取得這個 Java 節點的 JNI 物件參考。

(繼承來源 Object)
ThresholdClass

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

ThresholdType

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

方法

名稱 Description
AccessModeType(VarHandle+AccessMode)

取得此 VarHandle 存取模式類型及指定的存取模式。

AcquireFence()

確保圍欄前的貨物不會被重新排序為圍欄後的貨物和儲存。

Clone()

建立並回傳此物件的副本。

(繼承來源 Object)
CompareAndExchange(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

CompareAndExchangeAcquire(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

CompareAndExchangeRelease(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

CompareAndSet(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

Construct(JniObjectReference, JniObjectReferenceOptions)

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

(繼承來源 JavaObject)
CoordinateTypes()

回傳此 VarHandle 的座標類型。

Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

(繼承來源 JavaObject)
Equals(Object)

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

(繼承來源 JavaObject)
Equals(Object)

表示是否有其他物體「等同」於此物。

(繼承來源 Object)
FullFence()

確保圍欄前的貨物與倉庫不會被重新排序為圍欄後的貨物與倉庫。

Get(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAcquire(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndAdd(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndAddAcquire(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndAddRelease(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndBitwiseAnd(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndBitwiseAndAcquire(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndBitwiseAndRelease(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndBitwiseOr(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndBitwiseOrAcquire(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndBitwiseOrRelease(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndBitwiseXor(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndBitwiseXorAcquire(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndBitwiseXorRelease(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndSet(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndSetAcquire(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetAndSetRelease(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetHashCode()

回傳物件的雜湊碼值。

(繼承來源 Object)
GetOpaque(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

GetVolatile(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

IsAccessModeSupported(VarHandle+AccessMode)

判斷該存取模式是否被此 VarHandle模式支援。

JavaFinalize()
已淘汰.

當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。

(繼承來源 Object)
LoadLoadFence()

確保圍欄前的貨物不會被重新排序,圍欄後的貨物。

Notify()

喚醒一個正在該物件監視器上等待的執行緒。

(繼承來源 Object)
NotifyAll()

喚醒所有等待該物件監視器的執行緒。

(繼承來源 Object)
ReleaseFence()

確保圍欄前的貨物不會被重新排序,圍欄後的倉庫。

Set(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetOpaque(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

(繼承來源 JavaObject)
SetRelease(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

SetVolatile(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

StoreStoreFence()

確保圍欄前的店鋪不會被重新排序,圍欄後的店鋪也不會被重新排序。

ToArray<T>()

從這個 Java 陣列包裝器建立一個受管理陣列。

(繼承來源 Object)
ToMethodHandle(VarHandle+AccessMode)

會取得綁定到此 VarHandle 方法的 handle 及指定的存取模式。

ToString()

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

ToString()

回傳物件的字串表示。

(繼承來源 Object)
UnregisterFromRuntime()

將此 Java 節點從互通執行時中取消註冊。

(繼承來源 Object)
VarType()

回傳此 VarHandle 所參考的變數類型。

Wait()

導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。

(繼承來源 Object)
Wait(Int64, Int32)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)
Wait(Int64)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)
WeakCompareAndSet(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

WeakCompareAndSetAcquire(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

WeakCompareAndSetPlain(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

WeakCompareAndSetRelease(Object[])

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

明確介面實作

名稱 Description
IJavaPeerable.Disposed()

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

(繼承來源 JavaObject)
IJavaPeerable.Finalized()

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

(繼承來源 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

(繼承來源 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

(繼承來源 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

(繼承來源 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

(繼承來源 JavaObject)

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

VarHandle 是一種動態強型別的參考,指向變數或參數定義的變數族,包括靜態欄位、非靜態欄位、陣列元素或堆外資料結構的元件。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於