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
- 属性
- 実装
注釈
ダイレクト メソッド ハンドルをそのコンシット記号部分に割り込むことで得られるシンボリック参照。 ダイレクト メソッド ハンドルを解読するには、 Lookup#revealDirect Lookup.revealDirectを呼び出します。
<h1>"directmh">Direct メソッド ハンドル</h1><em>direct メソッド ハンドル</em> は、引数のバインドやその他の変換を介入せずに、メソッド、コンストラクター、またはフィールドを表します。 ダイレクト メソッド ハンドルによって参照されるメソッド、コンストラクター、またはフィールドは、その <em>基になるメンバー</em>と呼ばれます。 ダイレクト メソッド ハンドルは、次のいずれかの方法で取得できます。<ul><li>ldc定数に対してCONSTANT_MethodHandle命令を実行します。 (Java仮想マシンの仕様、セクション 4.4.8 および 5.4.3 を参照してください)。<li>シンボル参照をメソッド ハンドルに解決するには、Lookup#findVirtual Lookup.findVirtual などの Lookup Factory メソッドのいずれかを呼び出します。 シンボリック参照は、クラス、名前文字列、および型で構成されます。
<li>ファクトリ メソッド Lookup#unreflect Lookup.unreflect 呼び出すか、 Lookup#unreflectSpecial Lookup.unreflectSpecial を呼び出して、 Method をメソッド ハンドルに変換します。
<li>Lookup#unreflectConstructor Lookup.unreflectConstructorをメソッド ハンドルに変換するためにConstructorファクトリ メソッドを呼び出します。
<li>ファクトリ メソッド Lookup#unreflectGetter Lookup.unreflectGetter 呼び出すか、 Lookup#unreflectSetter Lookup.unreflectSetter を呼び出して、 Field をメソッド ハンドルに変換します。
</ul>
<h1> Cracking</h1> 適切な Lookup オブジェクトを指定すると、基になるメソッド、コンストラクター、またはフィールドのシンボリック参照を回復するために、ダイレクト メソッド ハンドルを解読できます。 クラッキングは、ターゲット メソッド ハンドルを作成したオブジェクトと同等の Lookup オブジェクトを介して行うか、同等のメソッド ハンドルを再作成するのに十分なアクセス許可を持つオブジェクトを介して行う必要があります。
基になるメソッドが呼び出し元の機密性の高い場合、ダイレクト メソッド ハンドルは、特定の呼び出し元クラス (java.lang.invoke.MethodHandles.Lookup#lookupClass() 参照クラス) に "バインド" され、その作成に使用されます。 基になるメソッドがパブリック ( Class.forName など) であっても、このメソッド ハンドルを別の参照クラスで解読すると失敗します。
参照オブジェクトの照合の要件は、予期しないスコープからのシンボリック情報 (または呼び出し元のバインド) を使用してメソッド ハンドルの誤った啓示を信頼する可能性があるプログラムに対して"高速失敗" 動作を提供します。 この制限をオーバーライドするには、 java.lang.invoke.MethodHandles#reflectAs を使用します。
<h1>"refkinds">Reference の種類</h1> Lookup Factory メソッドは、メソッド、コンストラクター、およびフィールドのすべての主要なユース ケースに対応します。 これらのユース ケースは、小さな整数を使用して区別できます。<table border=1 cellpadding=5 summary="reference kind"><tr><th>reference kind</th><th>descriptive name</th><th>scope</th><th>thmember</th><th>behavior</th></tr><tr><td>1</td><td>REF_getField</td><td>class</td><td>FT f;</td><td>(T) this.f;</td></tr><tr><td>2</td><td>REF_getStatic</td><>classまたはinterface</td><td>static<br>FT f;</td><td>(T) C.f;</td></tr><tr><td>3</td><td>REF_putField</td><td>class</td><td>FT f;</td><td>this.f = x;</td></tr><trtr><td>4</td><td>REF_putStatic</td><td>class</td><td>static<br>FT f;</td><td>C.f = arg;</td></tr><tr><td>5</td><td>REF_invokeVirtual</td><td>class</td><td>T m(A*);</td><td>(T) this.m(arg*);</td></tr><tr><td>6</td><td>REF_invokeStatic</td><td>class または interface</td><td>static<br>T m(A*);</td><td>(T) C.m(arg*);</td></tr><><td>7</td><td>REF_invokeSpecial</td><td>class または interface</td><td>T m(A*);</td><td>(T) super.m(arg*);</td></tr><tr><td>8</td><td>REF_newInvokeSpecial</td><td>class</td><td>C(A*);</td><td>new C(arg*);</td></tr><tr><td>9</td><td>REF_invokeInterface</td><td>interface</td><td>T m(A*);</td><td>(T) this.m(arg*);</td></tr></table>
1.8 で追加されました。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
プロパティ
| 名前 | 説明 |
|---|---|
| DeclaringClass |
cracked メソッド ハンドルの基になるメンバーが定義されたクラスを返します。 |
| Handle |
基になる Android オブジェクトの JNI 値を取得します。 (継承元 IJavaObject) |
| IsVarArgs |
基になるメンバーが変数アリティ メソッドまたはコンストラクターであるかどうかを判断します。 |
| JniIdentityHashCode |
ラップされたインスタンスの |
| JniManagedPeerState |
マネージド ピアの状態。 (継承元 IJavaPeerable) |
| JniObjectReferenceControlBlock |
ダイレクト メソッド ハンドルをそのコンシット記号部分に割り込むことで得られるシンボリック参照。 (継承元 IJavaPeerable) |
| JniPeerMembers |
メンバー アクセスと呼び出しのサポート。 (継承元 IJavaPeerable) |
| MethodType |
メソッド型として表される、割れたシンボリック参照の名目上の型を返します。 |
| Modifiers |
基になるメンバーのアクセス修飾子を返します。 |
| Name |
解読されたメソッド ハンドルの基になるメンバーの名前を返します。 |
| PeerReference |
ラップされたJava オブジェクト インスタンスのJniObjectReferenceを返します。 (継承元 IJavaPeerable) |
| ReferenceKind |
割り込まれたメソッド ハンドルの参照の種類を返します。メソッド ハンドルの基になるメンバーがコンストラクター、メソッド、またはフィールドであったかどうかを判断します。 |
メソッド
| 名前 | 説明 |
|---|---|
| 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) |
シンボリック参照の 4 つの部分を指定して、 |
| UnregisterFromRuntime() |
ランタイムが将来の Java.Interop.JniRuntime+JniValueManager.PeekValue 呼び出しから返されないように、このインスタンスの登録を解除します。 (継承元 IJavaPeerable) |
拡張メソッド
| 名前 | 説明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
インスタンス |
| JavaAs<TResult>(IJavaPeerable) |
|
| JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
| JavaCast<TResult>(IJavaObject) |
ダイレクト メソッド ハンドルをそのコンシット記号部分に割り込むことで得られるシンボリック参照。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
|