public interface MethodHandleInfo
直接メソッド・ハンドルをその構成要素のシンボリック部分にクラッシュすることによって取得されるシンボリック参照。 直接メソッド・ハンドルを解決するには、
 
 
 
Lookup.revealDirectを呼び出してください。 
 直接メソッド・ハンドル
直接メソッド・ハンドルは、引数バインディングまたは他の変換が介在しないメソッド、コンストラクタ、またはフィールドを表します。 直接メソッド・ハンドルによって参照されるメソッド、コンストラクタまたはフィールドは、その基礎となるメンバーと呼ばれます。 直接メソッド・ハンドルはこれらの方法で取得できます。- CONSTANT_MethodHandle定数の- ldc命令を実行する。 (Java Virtual Machine仕様の4.4.8および5.4.3の項を参照してください。)
- いずれかのルックアップ・ファクトリ・メソッド(Lookup.findVirtualなど)を呼び出すことで、シンボリック参照をメソッド・ハンドルに解決する。 シンボリック参照はクラス、名前文字列および型で構成されます。
- ファクトリ・メソッドLookup.unreflectまたはLookup.unreflectSpecialを呼び出すことで、Methodをメソッド・ハンドルに変換する。
- ファクトリ・メソッドLookup.unreflectConstructorを呼び出すことで、Constructorをメソッド・ハンドルに変換する。
- ファクトリ・メソッドLookup.unreflectGetterまたはLookup.unreflectSetterを呼び出すことで、Fieldをメソッド・ハンドルに変換する。
解決時の制限
適切なLookupオブジェクトが渡されると、直接メソッド・ハンドルを解決して、基礎となるメソッド、コンストラクタまたはフィールドのシンボリック参照を復元できます。 解決は、ターゲット・メソッド・ハンドルを作成したもの、または同等のメソッド・ハンドルを再作成するために十分なアクセス権を持つものと同等のLookupオブジェクトを介して行う必要があります。 
 
 基礎となるメソッドが呼出し元依存の場合、直接メソッド・ハンドルは特定の呼出し元クラス(ルックアップ・オブジェクトを作成するために使用されたルックアップ・クラス)にバインドされます。 別のルックアップ・クラスを使用したこのメソッド・ハンドルの解決は失敗します(Class.forNameなど、基礎となるメソッドがpublicの場合でも)。 
 
 ルックアップ・オブジェクト・マッチングの要件はプログラムにファスト・フェイル動作を提供します。そうでない場合、想定外のスコープのシンボリック情報(または呼出し元バインディング)でメソッド・ハンドルが誤って解決されても、それをプログラムが信頼する可能性があります。 この制限をオーバーライドする場合は、MethodHandles.reflectAs(java.lang.Class<T>, java.lang.invoke.MethodHandle)を使用してください。 
 
参照の種類
ルックアップ・ファクトリ・メソッドは、メソッド、コンストラクタおよびフィールドの主要ユース・ケースのすべてに対応しています。 これらのユース・ケースは次のように小さな整数を使用して識別できます。| 参照の種類 | 説明的な名前 | scope | member | 動作 | 
|---|---|---|---|---|
| 1 | REF_getField | class | FT f; | (T) this.f; | 
| 2 | REF_getStatic | classまたはinterface | staticFT f; | (T) C.f; | 
| 3 | REF_putField | class | FT f; | this.f = x; | 
| 4 | REF_putStatic | class | staticFT f; | C.f = arg; | 
| 5 | REF_invokeVirtual | class | T m(A*); | (T) this.m(arg*); | 
| 6 | REF_invokeStatic | classまたはinterface | staticT m(A*); | (T) C.m(arg*); | 
| 7 | REF_invokeSpecial | classまたはinterface | T m(A*); | (T) super.m(arg*); | 
| 8 | REF_newInvokeSpecial | class | C(A*); | new C(arg*); | 
| 9 | REF_invokeInterface | interface | T m(A*); | (T) this.m(arg*); | 
- 導入されたバージョン:
- 1.8
- 
フィールドのサマリーフィールド修飾子と型フィールド説明static int前述の表で定義されている、直接メソッド・ハンドルの参照の種類。static int前述の表で定義されている、直接メソッド・ハンドルの参照の種類。static int前述の表で定義されている、直接メソッド・ハンドルの参照の種類。static int前述の表で定義されている、直接メソッド・ハンドルの参照の種類。static int前述の表で定義されている、直接メソッド・ハンドルの参照の種類。static int前述の表で定義されている、直接メソッド・ハンドルの参照の種類。static int前述の表で定義されている、直接メソッド・ハンドルの参照の種類。static int前述の表で定義されている、直接メソッド・ハンドルの参照の種類。static int前述の表で定義されている、直接メソッド・ハンドルの参照の種類。
- 
メソッドのサマリー修飾子と型メソッド説明Class<?>解読されたメソッド・ハンドルの基礎となるメンバーが定義されたクラスを返します。解決されたシンボリック参照の公称型をメソッド型として表現して返します。int基礎となるメンバーのアクセス修飾子を返します。getName()解決されたメソッド・ハンドルの基礎となるメンバーの名前を返します。int解読されたメソッド・ハンドルの参照の種類を返します。これに基づいて、メソッド・ハンドルの基礎となるメンバーがコンストラクタ、メソッド、フィールドのいずれであったかを判定します。default boolean基礎となるメンバーが、引数カウントが可変のメソッドまたはコンストラクタであったかどうかを判定します。static StringreferenceKindToString(int referenceKind)前述の表で定義されている、指定された参照の種類を説明する名前を返します。<T extends Member>
 TreflectAs(Class<T> expected, MethodHandles.Lookup lookup)メソッド、コンストラクタまたはフィールド・オブジクトの基礎となるメンバーをリフレクトします。static StringtoString(int kind, Class<?> defc, String name, MethodType type)MethodHandleInfoの文字列表現を、そのシンボリック参照の4つの部分を基に返します。
- 
フィールド詳細- 
REF_getFieldstatic final int REF_getField前述の表で定義されている、直接メソッド・ハンドルの参照の種類。- 関連項目:
- 定数フィールド値
 
- 
REF_getStaticstatic final int REF_getStatic前述の表で定義されている、直接メソッド・ハンドルの参照の種類。- 関連項目:
- 定数フィールド値
 
- 
REF_putFieldstatic final int REF_putField前述の表で定義されている、直接メソッド・ハンドルの参照の種類。- 関連項目:
- 定数フィールド値
 
- 
REF_putStaticstatic final int REF_putStatic前述の表で定義されている、直接メソッド・ハンドルの参照の種類。- 関連項目:
- 定数フィールド値
 
- 
REF_invokeVirtualstatic final int REF_invokeVirtual前述の表で定義されている、直接メソッド・ハンドルの参照の種類。- 関連項目:
- 定数フィールド値
 
- 
REF_invokeStaticstatic final int REF_invokeStatic前述の表で定義されている、直接メソッド・ハンドルの参照の種類。- 関連項目:
- 定数フィールド値
 
- 
REF_invokeSpecialstatic final int REF_invokeSpecial前述の表で定義されている、直接メソッド・ハンドルの参照の種類。- 関連項目:
- 定数フィールド値
 
- 
REF_newInvokeSpecialstatic final int REF_newInvokeSpecial前述の表で定義されている、直接メソッド・ハンドルの参照の種類。- 関連項目:
- 定数フィールド値
 
- 
REF_invokeInterfacestatic final int REF_invokeInterface前述の表で定義されている、直接メソッド・ハンドルの参照の種類。- 関連項目:
- 定数フィールド値
 
 
- 
- 
メソッドの詳細- 
getReferenceKindint getReferenceKind()解読されたメソッド・ハンドルの参照の種類を返します。これに基づいて、メソッド・ハンドルの基礎となるメンバーがコンストラクタ、メソッド、フィールドのいずれであったかを判定します。 定義については前述の表を参照してください。- 戻り値:
- 基礎となるメンバーへのアクセスに使用される参照の種類の整数コード
 
- 
getDeclaringClassClass<?> getDeclaringClass()解読されたメソッド・ハンドルの基礎となるメンバーが定義されたクラスを返します。- 戻り値:
- 基礎となるメンバーを宣言しているクラス
 
- 
getNameString getName()解決されたメソッド・ハンドルの基礎となるメンバーの名前を返します。 これは、基礎となるメンバーがコンストラクタだった場合は"<init>"、そうでない場合は単純なメソッド名またはフィールド名です。- 戻り値:
- 基本となるメンバーの単純名
 
- 
getMethodTypeMethodType getMethodType()解決されたシンボリック参照の公称型をメソッド型として表現して返します。 コンストラクタへの参照の場合、戻り型はvoidになります。 非staticメソッドへの参照の場合、メソッド型はthisパラメータを言及しません。 フィールドへの参照で、要求されたアクセスがフィールド読み取りの場合、メソッド型はパラメータを持たず、フィールド型を返します。 フィールドへの参照で、要求されたアクセスがフィールド書き出しの場合、メソッド型はフィールド型のパラメータを1つ持ち、voidを返します。元の直接メソッド・ハンドルは先頭 thisパラメータを含んでいることがあり、(コンストラクタの場合)void戻り型を構築されたクラスで置き換えます。 公称型はthisパラメータを含まず、(コンストラクタの場合)voidを返します。- 戻り値:
- メソッド型として表現された、基礎となるメンバーの型
 
- 
reflectAs<T extends Member> T reflectAs(Class<T> expected, MethodHandles.Lookup lookup)メソッド、コンストラクタまたはフィールド・オブジクトの基礎となるメンバーをリフレクトします。 基礎となるメンバーがpublicの場合、getMethod、getConstructorまたはgetFieldによって行われるようにリフレクトされます。 そうでない場合、getDeclaredMethod、getDeclaredConstructorまたはgetDeclaredFieldによって行われるようにリフレクトされます。 指定されたルックアップ・オブジェクトから基礎となるメンバーにアクセスできる必要があります。- 型パラメータ:
- T- 結果に期待する型(- Memberまたはサブタイプ)
- パラメータ:
- expected- 期待する結果型- Tを表すクラス・オブジェクト
- lookup- このMethodHandleInfoを作成したルックアップ・オブジェクト、または同等のアクセス特権を持つもの
- 戻り値:
- メソッド、コンストラクタまたはフィールド・オブジクトへの参照
- 例外:
- ClassCastException- メンバーが期待される型でない場合
- NullPointerException- どちらかの引数が- nullの場合
- IllegalArgumentException- 指定されたルックアップ・オブジェクトから基礎となるメンバーにアクセスできない場合
 
- 
getModifiersint getModifiers()基礎となるメンバーのアクセス修飾子を返します。- 戻り値:
- 基礎となるメンバーのJava言語修飾子、そのメンバーにアクセスできない場合は-1
- 関連項目:
- Modifier、- reflectAs(java.lang.Class<T>, java.lang.invoke.MethodHandles.Lookup)
 
- 
isVarArgsdefault boolean isVarArgs()基礎となるメンバーが、引数カウントが可変のメソッドまたはコンストラクタであったかどうかを判定します。 そのようなメンバーは可変引数コレクタであるメソッド・ハンドルによって表されます。- 実装要件:
- これは次と同等の結果を生成します。
 getReferenceKind() >= REF_invokeVirtual && Modifier.isTransient(getModifiers())
- 戻り値:
- 基礎となるメンバーが可変引数で宣言された場合にのみtrue。
 
- 
referenceKindToStringstatic String referenceKindToString(int referenceKind)前述の表で定義されている、指定された参照の種類を説明する名前を返します。 従来の接頭辞REF_は省略されます。- パラメータ:
- referenceKind- クラス・メンバーへのアクセスに使用される参照の種類の整数コード
- 戻り値:
- "getField"など、大文字小文字混在文字列
- 例外:
- IllegalArgumentException- 引数が有効な参照の種類番号でない場合
 
- 
toStringstatic String toString(int kind, Class<?> defc, String name, MethodType type)MethodHandleInfoの文字列表現を、そのシンボリック参照の4つの部分を基に返します。 これは"RK C.N:MT"形式に定義されます。RKはkindの参照の種類文字列、Cはdefcの名前、Nはname、MTはtypeです。 これらの4つの値は、MethodHandleInfoオブジェクトの参照の種類、宣言しているクラス、メンバー名およびメンバー型から取得できます。- 実装要件:
- これは次と同等の結果を生成します。
 String.format("%s %s.%s:%s", referenceKindToString(kind), defc.getName(), name, type)
- パラメータ:
- kind- シンボリック参照の参照の種類部分
- defc- シンボリック参照の宣言しているクラス部分
- name- シンボリック参照のメンバー名部分
- type- シンボリック参照のメンバー型部分
- 戻り値:
- "RK C.N:MT"形式の文字列
- 例外:
- IllegalArgumentException- 最初の引数が有効な参照の種類番号でない場合
- NullPointerException- いずれかの参照引数が- nullの場合
 
 
-