IMethodHandleInfo インターフェイス

定義

直接メソッド ハンドルをその共立的なシンボリック部分に割り込むことで得られるシンボリック参照。

[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.findVirtualLookup 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><staticbr><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><staticbrT 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

ラップされたインスタンスの の java.lang.System.identityHashCode() 値を返します。

(継承元 IJavaPeerable)
JniManagedPeerState

マネージド ピアの状態。

(継承元 IJavaPeerable)
JniPeerMembers

メンバー アクセスと呼び出しのサポート。

(継承元 IJavaPeerable)
MethodType

直接メソッド ハンドルをその共立的なシンボリック部分に割り込むことで得られるシンボリック参照。

Modifiers

直接メソッド ハンドルをその共立的なシンボリック部分に割り込むことで得られるシンボリック参照。

Name

直接メソッド ハンドルをその共立的なシンボリック部分に割り込むことで得られるシンボリック参照。

PeerReference

JniObjectReferenceラップされた Java オブジェクト インスタンスの を返します。

(継承元 IJavaPeerable)
ReferenceKind

直接メソッド ハンドルをその共立的なシンボリック部分に割り込むことで得られるシンボリック参照。

メソッド

Disposed()

インスタンスが破棄されたときに呼び出されます。

(継承元 IJavaPeerable)
DisposeUnlessReferenced()

このインスタンスへの未処理の参照がない場合は、 を呼び出 Dispose()します。それ以外の場合は何も行いません。

(継承元 IJavaPeerable)
Finalized()

インスタンスが終了したときに呼び出されます。

(継承元 IJavaPeerable)
ReferenceKindToString(ReferenceKind)

上記の表で定義されているように、指定された参照の種類のわかりやすい名前を返します。

RefKindIsField(ReferenceKind)

このメンバーは非推奨とされます。

RefKindIsValid(ReferenceKind)

このメンバーは非推奨とされます。

RefKindName(ReferenceKind)

このメンバーは非推奨とされます。

ReflectAs(Class, MethodHandles+Lookup)

基になるメンバーをメソッド、コンストラクター、またはフィールド オブジェクトとして反映します。

SetJniIdentityHashCode(Int32)

によって返される値を JniIdentityHashCode設定します。

(継承元 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

直接メソッド ハンドルをその共立的なシンボリック部分に割り込むことで得られるシンボリック参照。

(継承元 IJavaPeerable)
SetPeerReference(JniObjectReference)

によって返される値を PeerReference設定します。

(継承元 IJavaPeerable)
ToString(ReferenceKind, Class, String, MethodType)

シンボリック参照の 4 つの部分を MethodHandleInfo指定して、 の文字列表現を返します。

UnregisterFromRuntime()

ランタイムが将来 Java.Interop.JniRuntime+JniValueManager.PeekValue の呼び出しから返されないように、このインスタンスの登録を解除します。

(継承元 IJavaPeerable)

拡張メソッド

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

直接メソッド ハンドルをその共立的なシンボリック部分に割り込むことで得られるシンボリック参照。

GetJniTypeName(IJavaPeerable)

直接メソッド ハンドルをその共立的なシンボリック部分に割り込むことで得られるシンボリック参照。

適用対象