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