モジュール java.base
パッケージ java.lang.invoke

インタフェースMethodHandleInfo


public interface MethodHandleInfo
直接メソッド・ハンドルをその構成要素のシンボリック部分にクラッシュすることによって取得されるシンボリック参照。 直接メソッド・ハンドルを解決するには、Lookup.revealDirectを呼び出してください。

直接メソッド・ハンドル

直接メソッド・ハンドルは、引数バインディングまたは他の変換が介在しないメソッド、コンストラクタ、またはフィールドを表します。 直接メソッド・ハンドルによって参照されるメソッド、コンストラクタまたはフィールドは、その基礎となるメンバーと呼ばれます。 直接メソッド・ハンドルはこれらの方法で取得できます。

解決時の制限

適切なLookupオブジェクトが渡されると、直接メソッド・ハンドルを解決して、基礎となるメソッド、コンストラクタまたはフィールドのシンボリック参照を復元できます。 解決は、ターゲット・メソッド・ハンドルを作成したもの、または同等のメソッド・ハンドルを再作成するために十分なアクセス権を持つものと同等のLookupオブジェクトを介して行う必要があります。

基礎となるメソッドが呼出し元依存の場合、直接メソッド・ハンドルは特定の呼出し元クラス(ルックアップ・オブジェクトを作成するために使用されたルックアップ・クラス)にバインドされます。 別のルックアップ・クラスを使用したこのメソッド・ハンドルの解決は失敗します(Class.forNameなど、基礎となるメソッドがpublicの場合でも)。

ルックアップ・オブジェクト・マッチングの要件はプログラムにファスト・フェイル動作を提供します。そうでない場合、想定外のスコープのシンボリック情報(または呼出し元バインディング)でメソッド・ハンドルが誤って解決されても、それをプログラムが信頼する可能性があります。 この制限をオーバーライドする場合は、MethodHandles.reflectAs(java.lang.Class<T>, java.lang.invoke.MethodHandle)を使用してください。

参照の種類

ルックアップ・ファクトリ・メソッドは、メソッド、コンストラクタおよびフィールドの主要ユース・ケースのすべてに対応しています。 これらのユース・ケースは次のように小さな整数を使用して識別できます。
参照の種類
参照の種類説明的な名前scopemember動作
1REF_getFieldclass FT f;(T) this.f;
2REF_getStaticclassまたはinterface static
FT f;
(T) C.f;
3REF_putFieldclass FT f;this.f = x;
4REF_putStaticclass static
FT f;
C.f = arg;
5REF_invokeVirtualclass T m(A*);(T) this.m(arg*);
6REF_invokeStaticclassまたはinterface static
T m(A*);
(T) C.m(arg*);
7REF_invokeSpecialclassまたはinterface T m(A*);(T) super.m(arg*);
8REF_newInvokeSpecialclass C(A*);new C(arg*);
9REF_invokeInterfaceinterface T m(A*);(T) this.m(arg*);
導入されたバージョン:
1.8