IMethodHandleInfo 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
透過將直接方法柄破解為其連貫符號部分所獲得的符號參考。
[Android.Runtime.Register("java/lang/invoke/MethodHandleInfo", "", "Java.Lang.Invoke.IMethodHandleInfoInvoker", ApiSince=26)]
public interface IMethodHandleInfo : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/lang/invoke/MethodHandleInfo", "", "Java.Lang.Invoke.IMethodHandleInfoInvoker", ApiSince=26)>]
type IMethodHandleInfo = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 屬性
- 實作
備註
透過將直接方法柄破解為其連貫符號部分所獲得的符號參考。 要破解直接方法的 handle,請呼叫 Lookup#revealDirect Lookup.revealDirect。
<h1>「directmh」>直接方法句柄/<h1><em>直接方法handle</em> 表示一個方法、建構子或欄位,且不存在任何中間參數綁定或其他轉換。 直接方法句柄所指涉的方法、建構子或欄位稱為其 <em>底層成員</em>。 直接方法的句柄可以透過以下任一方式獲得:<ul><li>透過對常數執行ldc指令CONSTANT_MethodHandle。 (參見 Java 虛擬機規範,第 4.4.8 與 5.4.3 節。) <li>透過呼叫其中一個 Lookup Factory 方法,Lookup#findVirtual Lookup.findVirtual例如 ,將符號引用解析為方法句柄。 符號參考由類別、名稱字串和型別組成。
<li>透過呼叫工廠方法 Lookup#unreflect Lookup.unreflect 或 Lookup#unreflectSpecial Lookup.unreflectSpecial 將 a Method 轉換成方法句柄。
<透過>呼叫工廠方法 Lookup#unreflectConstructor Lookup.unreflectConstructor 將 a Constructor 轉換成方法 handle 。
<li>透過呼叫工廠方法 Lookup#unreflectGetter Lookup.unreflectGetter 或 Lookup#unreflectSetter Lookup.unreflectSetter 將 a Field 轉換成方法句柄。
</ul>
<h1>破解<限制/h1> 給定合適的 Lookup 物件,可以破解任何直接方法的柄,以恢復底層方法、建構子或欄位的符號參考。 破解必須透過 Lookup 與建立目標方法句柄的物件相符,或擁有足夠存取權限以重建等效方法柄的物件進行。
如果底層方法是呼叫者敏感的,直接方法的 handle 會被「綁定」到特定的呼叫類別,也就是用來建立該物件的 java.lang.invoke.MethodHandles.Lookup#lookupClass() 查找類別。 即使底層方法是公開的(例如 ),即使底層方法是公開的(例如 Class.forName),用不同的查找類別破解此方法句柄也會失敗。
查詢物件匹配的需求,為那些可能信任來自意外範圍的符號資訊(或呼叫者綁定)錯誤揭露方法句柄的程式提供了「快速失敗」行為。 用 java.lang.invoke.MethodHandles#reflectAs 來覆蓋這個限制。
<h1>“refkinds”>參考種類</h1> 查找工廠方法對應所有主要的方法、建構子與欄位的使用情境。 這些使用情境可用小整數區分如下:<表格邊框=1 cellpadding=5 summary=「參考種類」><tr><th>reference kind</th><th>描述名稱</th><th>scope< / th><th>成員</th><th 行為></><th/tr><tr><td>1</td><td>REF_getField</td><td>class</td td/td><td/td td>tdFT f;<><>/TD(T) this.f;</TR><TR><TD><>/TD TD/TD2<><> TD/TDREF_getStatic<>< 或 /TD>classTDinterface<>BR<>static<>/TDFT f;TD<><>/TD(T) C.f;</TR><TR><TD><>/TD3TD<><>/TD TD/TDREF_putFieldTD<><>/TDclass<><>/TD/FT f;<><>this.f = x;<><TD TR ><><達陣>4</達陣><TD>REF_putStatic</TD><達>class<陣/TD><>static<達陣 BR>FT f;</TD TD><>C.f = arg;/TD<></TR><TR TD><>5</TD><TD>REF_invokeVirtual</TD TD/TD><TD>class</TD TD/TD><TD>T m(A*);</TD><>(T) this.m(arg*);<><>< 轉換 TR><達陣>6</達陣><達>REF_invokeStatic<陣/達><>class陣 或interface< /TD><達陣 BR>static</>T m(A*);<TD 達><>(T) C.m(arg*);陣/<>TD</TR><TR TD><>7</TD><>REF_invokeSpecial< TD/TD><>class TD 或 /TD TD/TD 或 interface</TD><TD>T m(A*);</TD><>(T) super.m(arg*);</><TD/TR達陣><><> 達陣/達8陣 達<><>陣/達REF_newInvokeSpecial<><>陣 達陣/達class<陣 達><>陣/達C(A*);<><>new C(arg*);<><陣 達陣/達陣 TR 達陣><>/<>9<達陣 達陣 達><>陣/達REF_invokeInterface<><>陣 達陣/達interface<><>T m(A*);<><>(T) this.m(arg*);<陣/抄截/表格><><>
新增於1.8版本。
的 java.lang.invoke.MethodHandleInfoJava 檔。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
屬性
| 名稱 | Description |
|---|---|
| DeclaringClass |
回傳破解方法把柄底層成員所定義的類別。 |
| Handle |
取得底層 Android 物件的 JNI 值。 (繼承來源 IJavaObject) |
| IsVarArgs |
判斷底層成員是可變元度方法還是構造子。 |
| JniIdentityHashCode |
回傳包裹實例的 |
| JniManagedPeerState |
管理貴族的狀況。 (繼承來源 IJavaPeerable) |
| JniObjectReferenceControlBlock |
透過將直接方法柄破解為其連貫符號部分所獲得的符號參考。 (繼承來源 IJavaPeerable) |
| JniPeerMembers |
成員存取與召喚支援。 (繼承來源 IJavaPeerable) |
| MethodType |
回傳破解符號參考的名義型別,以方法型別表示。 |
| Modifiers |
回傳底層成員的存取修飾符。 |
| Name |
回傳破解方法手柄底層成員的名稱。 |
| PeerReference |
回傳JniObjectReference包裹後的 Java 物件實例。 (繼承來源 IJavaPeerable) |
| ReferenceKind |
回傳破解方法句柄的參考型態,進而判斷該方法柄的底層成員是建構子、方法還是欄位。 |
方法
| 名稱 | Description |
|---|---|
| Disposed() |
當實例被處理後才被召喚。 (繼承來源 IJavaPeerable) |
| DisposeUnlessReferenced() |
如果沒有未解決的參考資料,則 |
| Finalized() |
當實例完成後才會被通知。 (繼承來源 IJavaPeerable) |
| ReferenceKindToString(ReferenceKind) |
回傳給定參考類型描述名稱,如上表所定義。 |
| RefKindIsField(ReferenceKind) |
此會員已被棄用。 |
| RefKindIsValid(ReferenceKind) |
此會員已被棄用。 |
| RefKindName(ReferenceKind) |
此會員已被棄用。 |
| ReflectAs(Class, MethodHandles+Lookup) |
反映底層成員為方法、建構子或欄位物件。 |
| SetJniIdentityHashCode(Int32) |
將回傳的值設為 |
| SetJniManagedPeerState(JniManagedPeerStates) |
透過將直接方法柄破解為其連貫符號部分所獲得的符號參考。 (繼承來源 IJavaPeerable) |
| SetPeerReference(JniObjectReference) |
將回傳的值設為 |
| ToString(ReferenceKind, Class, String, MethodType) |
回傳一個字串表示,給 |
| UnregisterFromRuntime() |
取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。 (繼承來源 IJavaPeerable) |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
透過將直接方法柄破解為其連貫符號部分所獲得的符號參考。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |