クラスjava.lang.invoke.MethodHandle
の使用
MethodHandleを使用するパッケージ
パッケージ
説明
クラスやメソッド・ハンドルなどのランタイム・エンティティ用に「名目記述子」を表すクラスおよびインタフェース、および定数プール・エントリや
invokedynamicコール・サイトなどのクラス・ファイル・エンティティ用に「名目記述子」を表すクラスおよびインタフェース。Javaランタイム外部のメモリーおよびファンクションへの低レベル・アクセスを提供します。
java.lang.invokeパッケージは、Java Virtual Machineとやりとりするための低レベルのプリミティブを提供します。java.lang.runtimeパッケージでは、Java言語の低レベルのランタイム・サポートが提供されます。invokedynamicコール・サイトのリンクに使用されるインタフェースおよびクラスが含まれます。通常のJavaオブジェクトのリンカーを含みます。
独自の言語固有のオブジェクト・モデルおよび型変換を実装するために言語ランタイムに必要なインタフェースおよびクラスが含まれます。
言語ランタイムが独自の言語固有のオブジェクト・モデルおよび型変換を実装しやすくするために、一部のクラスの基本的な実装と様々なユーティリティを提供することで、より便利なクラスが含まれています。
Dynalinkの使用をより便利にするクラスが含まれています。これには、一部のクラスの基本的な実装と様々なユーティリティを提供します。
-
java.lang.constantでのMethodHandleの使用
MethodHandleを返すjava.lang.constantのメソッド -
java.lang.foreignでのMethodHandleの使用
MethodHandleを返すjava.lang.foreignのメソッド修飾子と型メソッド説明MemoryLayout.byteOffsetHandle(MemoryLayout.PathElement... elements) 指定されたレイアウト・パスによって選択されたレイアウトのオフセット(バイト)を計算するメソッド・ハンドルを作成します。パス内の初期レイアウトはこのレイアウトです。Linker.downcallHandle(FunctionDescriptor function, Linker.Option... options) Restricted.指定されたシグネチャで外部ファンクションをコールするために使用されるメソッド・ハンドルを作成します。Linker.downcallHandle(MemorySegment address, FunctionDescriptor function, Linker.Option... options) Restricted.指定されたシグネチャおよびアドレスを持つ外部ファンクションをコールするために使用されるメソッド・ハンドルを作成します。MemoryLayout.scaleHandle()このレイアウトでMemoryLayout.scale(long, long)を呼び出すために使用できるメソッド・ハンドルを返します。MemoryLayout.sliceHandle(MemoryLayout.PathElement... elements) メモリー・セグメントを指定して、指定されたレイアウト・パスによって選択されたレイアウトに対応するsliceを返すメソッド・ハンドルを作成します。パス内の初期レイアウトはこのレイアウトです。型MethodHandleのパラメータを持つjava.lang.foreignのメソッド修飾子と型メソッド説明Linker.upcallStub(MethodHandle target, FunctionDescriptor function, Arena arena, Linker.Option... options) Restricted.指定されたアリーナに関連付けられた関数ポインタとして、ほかの外部関数に渡すことができるアップコール・スタブを作成します。 -
java.lang.invokeでのMethodHandleの使用
MethodHandleを返すjava.lang.invokeのメソッド修飾子と型メソッド説明static MethodHandleMethodHandles.arrayConstructor(Class<?> arrayClass) anewarrayバイトコードの場合と同様に、必要な型の配列を構築するメソッド・ハンドルを生成します。static MethodHandleMethodHandles.arrayElementGetter(Class<?> arrayClass) aaloadバイトコードの場合と同様に、配列の要素に対する読み取りアクセスを提供するメソッド・ハンドルを生成します。static MethodHandleMethodHandles.arrayElementSetter(Class<?> arrayClass) astoreバイトコードの場合と同様に、配列の要素への書き込みアクセスを与えるメソッド・ハンドルを生成します。static MethodHandleMethodHandles.arrayLength(Class<?> arrayClass) arraylengthバイトコードの場合と同様に、配列の長さを返すメソッド・ハンドルを生成します。MethodHandle.asCollector(int collectArgPos, Class<?> arrayType, int arrayLength) array-collectingメソッド・ハンドルを作成します。このハンドルは、指定された位置から始まる特定の数の位置引数を受け入れ、配列引数に収集します。MethodHandle.asCollector(Class<?> arrayType, int arrayLength) 末尾の指定された数の定位置引数を受け取り、それらを集めて1つの配列引数に格納するような、配列収集メソッド・ハンドルを作成します。MethodHandle.asFixedArity()固定引数カウント・メソッド・ハンドル(その他の点では現在のメソッド・ハンドルと同等のもの)を作成します。MethodHandle.asSpreader(int spreadArgPos, Class<?> arrayType, int arrayLength) array-spreadingメソッド・ハンドルを作成します。このハンドルは、指定された位置の配列引数を受け入れ、その要素を配列のかわりに位置引数として分散します。MethodHandle.asSpreader(Class<?> arrayType, int arrayLength) 末尾の1つの配列引数を受け取り、その要素を複数の定位置引数に分配するような、配列分配メソッド・ハンドルを作成します。final MethodHandleMethodHandle.asType(MethodType newType) 現在のメソッド・ハンドルの型を新しい型に適応させるアダプタ・メソッド・ハンドルを生成します。MethodHandle.asVarargsCollector(Class<?> arrayType) 末尾の任意の数の定位置引数を受け取り、それらを集めて1つの配列引数に格納できるような、可変引数アダプタを作成します。MethodHandles.Lookup.bind(Object receiver, String name, MethodType type) 非staticメソッドの早期バインド・メソッド・ハンドルを生成します。値xをメソッド・ハンドルの最初の引数にバインドしますが、その呼出しは行いません。static MethodHandleMethodHandles.catchException(MethodHandle target, Class<? extends Throwable> exType, MethodHandle handler) ターゲットのメソッド・ハンドルを例外ハンドラの内部で実行することによって、このターゲットを適応させるメソッド・ハンドルを作成します。static MethodHandleMethodHandles.collectArguments(MethodHandle target, int pos, MethodHandle filter) ターゲット・メソッド・ハンドルを、フィルタ(別のメソッド・ハンドル)でその引数のサブシーケンスを前処理することにより、適応させます。static MethodHandle要求された戻り値の型を持ち、呼び出されるたびに指定された定数値を返すメソッド・ハンドルを生成します。static MethodHandleMethodHandles.countedLoop(MethodHandle iterations, MethodHandle init, MethodHandle body) 指定された数の反復を実行するループを構築します。static MethodHandleMethodHandles.countedLoop(MethodHandle start, MethodHandle end, MethodHandle init, MethodHandle body) 数値の範囲にわたってカウントするループを構築します。static MethodHandleMethodHandles.doWhileLoop(MethodHandle init, MethodHandle body, MethodHandle pred) 初期化子、本文および述語からdo-whileループを構築します。static MethodHandleMethodHandles.dropArguments(MethodHandle target, int pos, Class<?>... valueTypes) いくつかのダミー引数を破棄してから指定された別のtargetメソッド・ハンドルを呼び出すメソッド・ハンドルを生成します。static MethodHandleMethodHandles.dropArguments(MethodHandle target, int pos, List<Class<?>> valueTypes) いくつかのダミー引数を破棄してから指定された別のtargetメソッド・ハンドルを呼び出すメソッド・ハンドルを生成します。static MethodHandleMethodHandles.dropArgumentsToMatch(MethodHandle target, int skip, List<Class<?>> newTypes, int pos) 指定されたパラメータ・タイプ・リストと一致するようにターゲット・メソッド・ハンドルを適応させます。static MethodHandleMethodHandles.dropReturn(MethodHandle target) ターゲット・ハンドル(もしあれば)の戻り値を削除します。abstract MethodHandleCallSite.dynamicInvoker()このコール・サイトにリンクされているinvokedynamic命令と同等のメソッド・ハンドルを生成します。final MethodHandleConstantCallSite.dynamicInvoker()このコール・サイトの永続的なターゲットを返します。final MethodHandleMutableCallSite.dynamicInvoker()このコール・サイトにリンクされているinvokedynamic命令と同等のメソッド・ハンドルを生成します。final MethodHandleVolatileCallSite.dynamicInvoker()このコール・サイトにリンクされているinvokedynamic命令と同等のメソッド・ハンドルを生成します。static MethodHandleMethodHandles.empty(MethodType type) リクエストされた型のメソッド・ハンドルを生成します。引数は無視され、何も実行されず、戻り値の型に応じて適切なデフォルトが返されます。static MethodHandleMethodHandles.exactInvoker(MethodType type) 特殊なインボーカ・メソッド・ハンドルを生成します(これを使用すれば、指定された型の任意のメソッド・ハンドルを、invokeExactを使用する場合と同様に呼び出すことができる)。static MethodHandleMethodHandles.explicitCastArguments(MethodHandle target, MethodType newType) 指定されたメソッド・ハンドルの型を新しい型に適応させるために、引数と戻り値の型の変換をペア単位で行うメソッド・ハンドルを生成します。static MethodHandleMethodHandles.filterArguments(MethodHandle target, int pos, MethodHandle... filters) ターゲット・メソッド・ハンドルを適応させるため、その1つ以上の引数をそれぞれ固有の単項フィルタ関数を使って前処理したあと、前処理を行った各引数を対応するフィルタ関数の結果で置き換えてターゲットを呼び出します。static MethodHandleMethodHandles.filterReturnValue(MethodHandle target, MethodHandle filter) ターゲット・メソッド・ハンドルを適応させるため、その戻り値(存在する場合)をフィルタ(別のメソッド・ハンドル)で後処理します。MethodHandles.Lookup.findConstructor(Class<?> refc, MethodType type) 指定された型のコンストラクタを使ってオブジェクトの作成と初期化を行うメソッド・ハンドルを生成します。MethodHandles.Lookup.findGetter(Class<?> refc, String name, Class<?> type) 非staticフィールドに対する読取りアクセスを提供するメソッド・ハンドルを生成します。MethodHandles.Lookup.findSetter(Class<?> refc, String name, Class<?> type) 非staticフィールドに対する書込みアクセスを提供するメソッド・ハンドルを生成します。MethodHandles.Lookup.findSpecial(Class<?> refc, String name, MethodType type, Class<?> specialCaller) 仮想メソッドの早期にバインドされるメソッド・ハンドルを生成します。MethodHandles.Lookup.findStatic(Class<?> refc, String name, MethodType type) staticメソッドのメソッド・ハンドルを生成します。MethodHandles.Lookup.findStaticGetter(Class<?> refc, String name, Class<?> type) staticフィールドに対する読取りアクセスを提供するメソッド・ハンドルを生成します。MethodHandles.Lookup.findStaticSetter(Class<?> refc, String name, Class<?> type) staticフィールドに対する書込みアクセスを提供するメソッド・ハンドルを生成します。MethodHandles.Lookup.findVirtual(Class<?> refc, String name, MethodType type) 仮想メソッドのメソッド・ハンドルを生成します。static MethodHandleMethodHandles.foldArguments(MethodHandle target, int pos, MethodHandle combiner) ターゲット・メソッド・ハンドルは、指定された位置から始めて、その引数の一部を前処理し、前処理の結果でターゲットをコールして、折り畳まれた引数の直前に元の引数のシーケンスに挿入することによって適応されます。static MethodHandleMethodHandles.foldArguments(MethodHandle target, MethodHandle combiner) ターゲット・メソッド・ハンドルを適応させるため、その引数のいくつかを前処理したあと、前処理の結果を元の一連の引数内に挿入してターゲットを呼び出します。abstract MethodHandleCallSite.getTarget()このコール・サイトの特定のクラスで定義された動作に従って、コール・サイトのターゲット・メソッドを返します。final MethodHandleConstantCallSite.getTarget()コール・サイトのターゲット・メソッドを返しますが、これは、ConstantCallSiteのfinalフィールドのように振る舞います。final MethodHandleMutableCallSite.getTarget()コール・サイトのターゲット・メソッドを返しますが、これは、MutableCallSiteの通常のフィールドのように振る舞います。final MethodHandleVolatileCallSite.getTarget()コール・サイトのターゲット・メソッドを返しますが、これは、VolatileCallSiteのvolatileフィールドのように振る舞います。static MethodHandleMethodHandles.guardWithTest(MethodHandle test, MethodHandle target, MethodHandle fallback) テスト(boolean値のメソッド・ハンドル)で保護することでターゲット・メソッド・ハンドルを適応させるメソッド・ハンドルを作成します。SwitchPoint.guardWithTest(MethodHandle target, MethodHandle fallback) 常にターゲット、フォール・バックのいずれかに委譲するメソッド・ハンドルを返します。static MethodHandle呼出し時に唯一の引数の値を返すメソッド・ハンドルを生成します。static MethodHandleMethodHandles.insertArguments(MethodHandle target, int pos, Object... values) ターゲット・メソッド・ハンドルの呼出しの前に、1つ以上のバインド引数をメソッド・ハンドルに提供します。static MethodHandleMethodHandles.invoker(MethodType type) 特殊なインボーカ・メソッド・ハンドルを生成します(これを使用すれば、指定された型と互換性のある任意のメソッド・ハンドルを、invokeを使用する場合と同様に呼び出すことができる)。static MethodHandleMethodHandles.iteratedLoop(MethodHandle iterator, MethodHandle init, MethodHandle body) Iterator<T>によって生成された値の範囲にあるループを構築します。static MethodHandleMethodHandles.loop(MethodHandle[]... clauses) 反復ごとに更新およびチェックされる複数のループ変数を持つループを表すメソッド・ハンドルを構築します。static MethodHandleMethodHandles.permuteArguments(MethodHandle target, MethodType newType, int... reorder) 引数の順序を変更することによって、指定されたメソッド・ハンドルの呼出し順序を新しい型に適応させるメソッド・ハンドルを生成します。static MethodHandleMethodHandles.spreadInvoker(MethodType type, int leadingArgCount) 指定されたtypeの任意のメソッド・ハンドルを呼び出すメソッド・ハンドルを生成しますが、その際、指定された数の末尾の引数が単一の末尾のObject[]配列で置き換えられます。static MethodHandleMethodHandles.tableSwitch(MethodHandle fallback, MethodHandle... targets) 表スイッチ・メソッド・ハンドルを作成します。これは、セレクタと呼ばれる特定のターゲット索引に基づいて、ターゲット・メソッド・ハンドルのセットを切り替えるために使用できます。static MethodHandleMethodHandles.throwException(Class<?> returnType, Class<? extends Throwable> exType) 指定されたexTypeの例外をスローするメソッド・ハンドルを生成します。VarHandle.toMethodHandle(VarHandle.AccessMode accessMode) このVarHandleおよび指定されたアクセス・モードにバインドされたメソッド・ハンドルを取得します。static MethodHandleMethodHandles.tryFinally(MethodHandle target, MethodHandle cleanup) targetメソッド・ハンドルをtry-finallyブロックにラップして適応させるメソッド・ハンドルを作成します。ルックアップ・クラスがアクセス権を持つ場合に、mへの直接メソッド・ハンドルを作成します。MethodHandles.Lookup.unreflectConstructor(Constructor<?> c) リフレクトされたコンストラクタのメソッド・ハンドルを生成します。MethodHandles.Lookup.unreflectGetter(Field f) リフレクトされたフィールドに対する読取りアクセス権を提供するメソッド・ハンドルを生成します。MethodHandles.Lookup.unreflectSetter(Field f) リフレクトされたフィールドに対する書込みアクセス権を提供するメソッド・ハンドルを生成します。MethodHandles.Lookup.unreflectSpecial(Method m, Class<?> specialCaller) リフレクトされたメソッドのメソッド・ハンドルを生成します。static MethodHandleMethodHandles.varHandleExactInvoker(VarHandle.AccessMode accessMode, MethodType type) 特別な「呼び出しメソッドhandle」を生成します。このメソッドを使用して、関連付けられたアクセス・モード・タイプが指定のタイプと互換性がある任意のVarHandleでシグネチャ-多相アクセス・モード・メソッドを呼び出すことができます。static MethodHandleMethodHandles.varHandleInvoker(VarHandle.AccessMode accessMode, MethodType type) 特別な「呼び出しメソッドhandle」を生成します。このメソッドを使用して、関連付けられたアクセス・モード・タイプが指定のタイプと互換性がある任意のVarHandleでシグネチャ-多相アクセス・モード・メソッドを呼び出すことができます。static MethodHandleMethodHandles.whileLoop(MethodHandle init, MethodHandle pred, MethodHandle body) 初期化子、本文および述語からwhileループを構築します。MethodHandle.withVarargs(boolean makeVarargs) static MethodHandleMethodHandleProxies.wrapperInstanceTarget(Object x) このラッパー・インスタンスの一意のメソッドと動作が同等であるターゲット・メソッド・ハンドルを生成または回復します。static MethodHandleリクエストされた戻り型の定数メソッド・ハンドルを生成します。このハンドルは、呼び出されるたびにその型のデフォルト値を返します。型MethodHandleのパラメータを持つjava.lang.invokeのメソッド修飾子と型メソッド説明static <T> TMethodHandleProxies.asInterfaceInstance(Class<T> intfc, MethodHandle target) 指定されたメソッド・ハンドルに呼出しをリダイレクトする、指定された単一メソッド・インタフェースのインスタンスを生成します。static MethodHandleMethodHandles.catchException(MethodHandle target, Class<? extends Throwable> exType, MethodHandle handler) ターゲットのメソッド・ハンドルを例外ハンドラの内部で実行することによって、このターゲットを適応させるメソッド・ハンドルを作成します。static MethodHandleMethodHandles.collectArguments(MethodHandle target, int pos, MethodHandle filter) ターゲット・メソッド・ハンドルを、フィルタ(別のメソッド・ハンドル)でその引数のサブシーケンスを前処理することにより、適応させます。static VarHandleMethodHandles.collectCoordinates(VarHandle target, int pos, MethodHandle filter) フィルタ(メソッド・ハンドル)を使用して座標値のサブ・シーケンスを前処理することで、ターゲット変数ハンドルを調整します。static MethodHandleMethodHandles.countedLoop(MethodHandle iterations, MethodHandle init, MethodHandle body) 指定された数の反復を実行するループを構築します。static MethodHandleMethodHandles.countedLoop(MethodHandle start, MethodHandle end, MethodHandle init, MethodHandle body) 数値の範囲にわたってカウントするループを構築します。static MethodHandleMethodHandles.doWhileLoop(MethodHandle init, MethodHandle body, MethodHandle pred) 初期化子、本文および述語からdo-whileループを構築します。static MethodHandleMethodHandles.dropArguments(MethodHandle target, int pos, Class<?>... valueTypes) いくつかのダミー引数を破棄してから指定された別のtargetメソッド・ハンドルを呼び出すメソッド・ハンドルを生成します。static MethodHandleMethodHandles.dropArguments(MethodHandle target, int pos, List<Class<?>> valueTypes) いくつかのダミー引数を破棄してから指定された別のtargetメソッド・ハンドルを呼び出すメソッド・ハンドルを生成します。static MethodHandleMethodHandles.dropArgumentsToMatch(MethodHandle target, int skip, List<Class<?>> newTypes, int pos) 指定されたパラメータ・タイプ・リストと一致するようにターゲット・メソッド・ハンドルを適応させます。static MethodHandleMethodHandles.dropReturn(MethodHandle target) ターゲット・ハンドル(もしあれば)の戻り値を削除します。static MethodHandleMethodHandles.explicitCastArguments(MethodHandle target, MethodType newType) 指定されたメソッド・ハンドルの型を新しい型に適応させるために、引数と戻り値の型の変換をペア単位で行うメソッド・ハンドルを生成します。static MethodHandleMethodHandles.filterArguments(MethodHandle target, int pos, MethodHandle... filters) ターゲット・メソッド・ハンドルを適応させるため、その1つ以上の引数をそれぞれ固有の単項フィルタ関数を使って前処理したあと、前処理を行った各引数を対応するフィルタ関数の結果で置き換えてターゲットを呼び出します。static VarHandleMethodHandles.filterCoordinates(VarHandle target, int pos, MethodHandle... filters) 単項フィルタ関数を使用して着信座標値を前処理することで、ターゲット変数ハンドルを適応させます。static MethodHandleMethodHandles.filterReturnValue(MethodHandle target, MethodHandle filter) ターゲット・メソッド・ハンドルを適応させるため、その戻り値(存在する場合)をフィルタ(別のメソッド・ハンドル)で後処理します。static VarHandleMethodHandles.filterValue(VarHandle target, MethodHandle filterToTarget, MethodHandle filterFromTarget) フィルタ関数のペアを使用して受信値と送信値を事前処理することで、ターゲット変数ハンドルを適応させます。static MethodHandleMethodHandles.foldArguments(MethodHandle target, int pos, MethodHandle combiner) ターゲット・メソッド・ハンドルは、指定された位置から始めて、その引数の一部を前処理し、前処理の結果でターゲットをコールして、折り畳まれた引数の直前に元の引数のシーケンスに挿入することによって適応されます。static MethodHandleMethodHandles.foldArguments(MethodHandle target, MethodHandle combiner) ターゲット・メソッド・ハンドルを適応させるため、その引数のいくつかを前処理したあと、前処理の結果を元の一連の引数内に挿入してターゲットを呼び出します。static MethodHandleMethodHandles.guardWithTest(MethodHandle test, MethodHandle target, MethodHandle fallback) テスト(boolean値のメソッド・ハンドル)で保護することでターゲット・メソッド・ハンドルを適応させるメソッド・ハンドルを作成します。SwitchPoint.guardWithTest(MethodHandle target, MethodHandle fallback) 常にターゲット、フォール・バックのいずれかに委譲するメソッド・ハンドルを返します。static MethodHandleMethodHandles.insertArguments(MethodHandle target, int pos, Object... values) ターゲット・メソッド・ハンドルの呼出しの前に、1つ以上のバインド引数をメソッド・ハンドルに提供します。static ObjectConstantBootstraps.invoke(MethodHandles.Lookup lookup, String name, Class<?> type, MethodHandle handle, Object... args) 指定された引数を使ってメソッド・ハンドルを呼び出した結果を返します。static MethodHandleMethodHandles.iteratedLoop(MethodHandle iterator, MethodHandle init, MethodHandle body) Iterator<T>によって生成された値の範囲にあるループを構築します。static MethodHandleMethodHandles.loop(MethodHandle[]... clauses) 反復ごとに更新およびチェックされる複数のループ変数を持つループを表すメソッド・ハンドルを構築します。static CallSiteLambdaMetafactory.metafactory(MethodHandles.Lookup caller, String interfaceMethodName, MethodType factoryType, MethodType interfaceMethodType, MethodHandle implementation, MethodType dynamicMethodType) 適切な型適応および引数の部分評価の後、指定されたMethodHandleへの委譲により、1つ以上のインタフェースを実装する単純な関数オブジェクトの作成を容易にします。static MethodHandleMethodHandles.permuteArguments(MethodHandle target, MethodType newType, int... reorder) 引数の順序を変更することによって、指定されたメソッド・ハンドルの呼出し順序を新しい型に適応させるメソッド・ハンドルを生成します。static <T extends Member>
TMethodHandles.reflectAs(Class<T> expected, MethodHandle target) 直接メソッド・ハンドルの未チェックの解読を実行します。MethodHandles.Lookup.revealDirect(MethodHandle target) この参照オブジェクトまたは類似のオブジェクトによって作成された直接メソッド・ハンドルを解読します。abstract voidCallSite.setTarget(MethodHandle newTarget) このコール・サイトの特定のクラスで定義された動作に従って、このコール・サイトのターゲット・メソッドを更新します。final voidConstantCallSite.setTarget(MethodHandle ignore) 常にUnsupportedOperationExceptionをスローします。voidMutableCallSite.setTarget(MethodHandle newTarget) このコール・サイトのターゲット・メソッドを通常の変数として更新します。voidVolatileCallSite.setTarget(MethodHandle newTarget) このコール・サイトのターゲット・メソッドをvolatile変数として更新します。static MethodHandleMethodHandles.tableSwitch(MethodHandle fallback, MethodHandle... targets) 表スイッチ・メソッド・ハンドルを作成します。これは、セレクタと呼ばれる特定のターゲット索引に基づいて、ターゲット・メソッド・ハンドルのセットを切り替えるために使用できます。static MethodHandleMethodHandles.tryFinally(MethodHandle target, MethodHandle cleanup) targetメソッド・ハンドルをtry-finallyブロックにラップして適応させるメソッド・ハンドルを作成します。static MethodHandleMethodHandles.whileLoop(MethodHandle init, MethodHandle pred, MethodHandle body) 初期化子、本文および述語からwhileループを構築します。型MethodHandleのパラメータを持つjava.lang.invokeのコンストラクタ修飾子コンストラクタ説明ConstantCallSite(MethodHandle target) 永続的なターゲットを持つコール・サイトを作成します。protectedConstantCallSite(MethodType targetType, MethodHandle createTargetHook) 永続的なターゲットを持つコール・サイトを作成します(コール・サイト自体にバインドされる場合があります)。MutableCallSite(MethodHandle target) 初期ターゲット・メソッド・ハンドルを持つコール・サイト・オブジェクトを作成します。VolatileCallSite(MethodHandle target) ターゲットへのvolatileバインディングを持つコール・サイトを作成します。 -
java.lang.runtimeでのMethodHandleの使用
型MethodHandleのパラメータを持つjava.lang.runtimeのメソッド修飾子と型メソッド説明static ObjectObjectMethods.bootstrap(MethodHandles.Lookup lookup, String methodName, TypeDescriptor type, Class<?> recordClass, String names, MethodHandle... getters) invokedynamicコール・サイトまたは動的な定数プール・エントリのコンポーネント名およびアクセッサ・メソッドの説明に基づいて、Object.equals(Object)、Object.hashCode()およびObject.toString()メソッドを生成するブートストラップ・メソッド。 -
jdk.dynalinkでのMethodHandleの使用
型MethodHandleのパラメータを持つjdk.dynalinkのメソッド修飾子と型メソッド説明voidRelinkableCallSite.initialize(MethodHandle relinkAndInvoke) 再リンクおよび呼出しメソッド・ハンドルを設定して、再リンク可能コール・サイトを初期化するために動的リンカーによって呼び出されます。voidRelinkableCallSite.relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) このメソッドは、呼び出しサイトが再リンクされるたびに動的リンカーによって呼び出されます。(例外についてはRelinkableCallSite.resetAndRelink(GuardedInvocation, MethodHandle)を参照してください)。voidRelinkableCallSite.resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) このメソッドは、コール・サイトが再リンクされるたびにダイナミック・リンカーによって呼び出され、リンカーはコール・サイトが以前のリンケージ・ステート(それはRelinkableCallSite.relink(GuardedInvocation, MethodHandle)とどのように違うのですか?)を破棄することを望みます。 -
jdk.dynalink.beansでのMethodHandleの使用
MethodHandleを返すjdk.dynalink.beansのメソッド修飾子と型メソッド説明MissingMemberHandlerFactory.createMissingMemberHandler(LinkRequest linkRequest, LinkerServices linkerServices) 特定のリンク・リクエストに対して欠落しているメンバー動作を実装するのに適したメソッド・ハンドルを返します。 -
jdk.dynalink.linkerでのMethodHandleの使用
MethodHandleを返すjdk.dynalink.linkerのメソッド修飾子と型メソッド説明LinkerServices.asType(MethodHandle handle, MethodType fromType) asType(MethodType)と同様ですが、使用可能なすべてのGuardingTypeConverterFactory実装によって生成されるメソッド・ハンドルのフックも使用され、言語固有の型強制パラメータを提供します。MethodTypeConversionStrategy.asType(MethodHandle target, MethodType newType) メソッド・ハンドルを新しい型に変換します。default MethodHandleLinkerServices.asTypeLosslessReturn(MethodHandle handle, MethodType fromType) LinkerServices.asType(MethodHandle, MethodType)と同様ですが、戻り値の型変換を特に処理します。GuardedInvocation.compose(MethodHandle fallback) 呼出し、ガード、スイッチ・ポイントおよび例外をコンポジット・メソッド・ハンドルに構成します。このハンドルは、ガードが失敗した場合や呼出しが無効になった場合にフォールバックする方法を認識します。GuardedInvocation.compose(MethodHandle guardFallback, MethodHandle switchpointFallback, MethodHandle catchFallback) 呼出し、ガード、スイッチ・ポイントおよび例外をコンポジット・メソッド・ハンドルに構成します。このハンドルは、ガードが失敗した場合や呼出しが無効になった場合にフォールバックする方法を認識します。LinkerServices.filterInternalObjects(MethodHandle target) 潜在的に内部言語ランタイム・オブジェクトを受信できるすべてのパラメータにフィルタが追加されるように、メソッド・ハンドルを変更します。これにより、それらのオブジェクトがエスケープされないようにできます。GuardedInvocation.getGuard()ガード・メソッド・ハンドルを返します。GuardedInvocation.getInvocation()起動メソッド・ハンドルを返します。LinkerServices.getTypeConverter(Class<?> sourceType, Class<?> targetType) ソース・タイプとターゲット・タイプを指定すると、それらの間で変換されるメソッド・ハンドルが返されます。MethodHandleTransformer.transform(MethodHandle target) メソッド・ハンドルを変換します。型MethodHandleのパラメータを持つjdk.dynalink.linkerのメソッド修飾子と型メソッド説明LinkerServices.asType(MethodHandle handle, MethodType fromType) asType(MethodType)と同様ですが、使用可能なすべてのGuardingTypeConverterFactory実装によって生成されるメソッド・ハンドルのフックも使用され、言語固有の型強制パラメータを提供します。MethodTypeConversionStrategy.asType(MethodHandle target, MethodType newType) メソッド・ハンドルを新しい型に変換します。default MethodHandleLinkerServices.asTypeLosslessReturn(MethodHandle handle, MethodType fromType) LinkerServices.asType(MethodHandle, MethodType)と同様ですが、戻り値の型変換を特に処理します。GuardedInvocation.compose(MethodHandle fallback) 呼出し、ガード、スイッチ・ポイントおよび例外をコンポジット・メソッド・ハンドルに構成します。このハンドルは、ガードが失敗した場合や呼出しが無効になった場合にフォールバックする方法を認識します。GuardedInvocation.compose(MethodHandle guardFallback, MethodHandle switchpointFallback, MethodHandle catchFallback) 呼出し、ガード、スイッチ・ポイントおよび例外をコンポジット・メソッド・ハンドルに構成します。このハンドルは、ガードが失敗した場合や呼出しが無効になった場合にフォールバックする方法を認識します。GuardedInvocation.filterArguments(int pos, MethodHandle... filters) 呼び出しと(それが存在し、少なくともpos + 1パラメータ)をMethodHandles.filterArguments(MethodHandle, int, MethodHandle...)で保護する両方に引数フィルタを適用します。LinkerServices.filterInternalObjects(MethodHandle target) 潜在的に内部言語ランタイム・オブジェクトを受信できるすべてのパラメータにフィルタが追加されるように、メソッド・ハンドルを変更します。これにより、それらのオブジェクトがエスケープされないようにできます。GuardedInvocation.replaceMethods(MethodHandle newInvocation, MethodHandle newGuard) 異なるメソッドを使用して新しいガード付き呼出しを作成し、スイッチ・ポイントを保持します。MethodHandleTransformer.transform(MethodHandle target) メソッド・ハンドルを変換します。型MethodHandleのパラメータを持つjdk.dynalink.linkerのコンストラクタ修飾子コンストラクタ説明GuardedInvocation(MethodHandle invocation) 無条件でガードされた新しい呼出しを作成します。GuardedInvocation(MethodHandle invocation, MethodHandle guard) ガード・メソッド・ハンドルを使用して、新しいガード付き呼出しを作成します。GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint switchPoint) ガード・メソッド・ハンドルとスイッチ・ポイントの両方を使用して、ガード付きの新しい呼出しを作成します。GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint[] switchPoints, Class<? extends Throwable> exception) ガード・メソッド・ハンドル、無効化に使用できる任意の数のスイッチ・ポイント、および起動時にスローされた場合も無効化される例外を使用して、新しいガード付き呼出しを作成します。GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint switchPoint, Class<? extends Throwable> exception) ガード・メソッド・ハンドル、スイッチ・ポイントを使用して無効化できるスイッチ・ポイント、および起動時にスローされた場合も無効化される例外を使用して、新しいガード付き呼出しを作成します。GuardedInvocation(MethodHandle invocation, SwitchPoint switchPoint) スイッチ・ポイントによって無効化できる新しいガード付き呼出しを作成します。 -
jdk.dynalink.linker.supportでのMethodHandleの使用
修飾子と型メソッド説明static MethodHandleGuards.asType(MethodHandle test, MethodType type) ガードとして使用するメソッド・ハンドルを取得し、リクエストされた型に適応しますが、booleanを返します。static MethodHandleGuards.asType(LinkerServices linkerServices, MethodHandle test, MethodType type) ガードとして使用するメソッド・ハンドルを取得し、リクエストされた型に適応しますが、booleanを返します。Lookup.findGetter(Class<?> refc, String name, Class<?> type) static MethodHandleLookup.findOwnSpecial(MethodHandles.Lookup lookup, String name, Class<?> rtype, Class<?>... ptypes) ルックアップを指定すると、Lookup.findSpecial(Class, String, MethodType)を使用して、そのルックアップのクラスに対するメソッドを検索します。Lookup.findOwnSpecial(String name, Class<?> rtype, Class<?>... ptypes) Lookup.findSpecial(Class, String, MethodType)を使用して、そのルックアップのクラスのメソッドを検索します。static MethodHandleLookup.findOwnStatic(MethodHandles.Lookup lookup, String name, Class<?> rtype, Class<?>... ptypes) ルックアップを指定すると、Lookup.findStatic(Class, String, MethodType)を使用して、そのルックアップのクラスに対するメソッドを検索します。Lookup.findOwnStatic(String name, Class<?> rtype, Class<?>... ptypes) Lookup.findStatic(Class, String, MethodType)を使用して、そのルックアップのクラスのメソッドを検索します。Lookup.findSpecial(Class<?> declaringClass, String name, MethodType type) 基礎となるルックアップに対してMethodHandles.Lookup.findSpecial(Class, String, MethodType, Class)を実行します。Lookup.findStatic(Class<?> declaringClass, String name, MethodType type) 基礎となるルックアップに対してMethodHandles.Lookup.findStatic(Class, String, MethodType)を実行します。Lookup.findVirtual(Class<?> declaringClass, String name, MethodType type) 基礎となるルックアップに対してMethodHandles.Lookup.findVirtual(Class, String, MethodType)を実行します。static MethodHandleGuards.getClassGuard(Class<?> clazz) 特定のクラスであるための唯一の引数をテストするguardメソッドを作成します。static MethodHandleGuards.getIdentityGuard(Object obj) 他のオブジェクトと同じ参照を持つために唯一の引数をテストするガード・メソッドを作成static MethodHandleGuards.getInstanceOfGuard(Class<?> clazz) 特定のクラスのインスタンスであるための唯一の引数をテストするガード・メソッドを作成します。static MethodHandleGuards.isArray(int pos, MethodType type) 指定された位置の引数がJava配列である場合にtrueを返すメソッド・ハンドルを作成します。static MethodHandleGuards.isInstance(Class<?> clazz, int pos, MethodType type) 指定された型の引数を持つメソッド・ハンドルを作成しますが、ブール戻り値を使用します。static MethodHandleGuards.isInstance(Class<?> clazz, MethodType type) 指定された型の引数を持つメソッド・ハンドルを作成しますが、ブール戻り値を使用します。static MethodHandleGuards.isNotNull()最初の引数がnullでないかどうかをテストするガードを返します。static MethodHandleGuards.isNull()最初の引数がnullかどうかをテストするガードを返します。static MethodHandleGuards.isOfClass(Class<?> clazz, MethodType type) 指定された型の引数を持つガード・メソッド・ハンドルを作成しますが、ブール戻り値を使用します。DefaultInternalObjectFilter.transform(MethodHandle target) static MethodHandleLookup.unreflect(MethodHandles.Lookup lookup, Method m) static MethodHandleLookup.unreflectConstructor(MethodHandles.Lookup lookup, Constructor<?> c) Lookup.unreflectConstructor(Constructor<?> c) Lookup.unreflectGetter(Field f) Lookup.unreflectSetter(Field f) 型MethodHandleのパラメータを持つjdk.dynalink.linker.supportのメソッド修飾子と型メソッド説明static MethodHandleGuards.asType(MethodHandle test, MethodType type) ガードとして使用するメソッド・ハンドルを取得し、リクエストされた型に適応しますが、booleanを返します。static MethodHandleGuards.asType(LinkerServices linkerServices, MethodHandle test, MethodType type) ガードとして使用するメソッド・ハンドルを取得し、リクエストされた型に適応しますが、booleanを返します。DefaultInternalObjectFilter.transform(MethodHandle target) 型MethodHandleのパラメータを持つjdk.dynalink.linker.supportのコンストラクタ修飾子コンストラクタ説明DefaultInternalObjectFilter(MethodHandle parameterFilter, MethodHandle returnFilter) 新しいフィルタを作成します。 -
jdk.dynalink.supportでのMethodHandleの使用
型MethodHandleのパラメータを持つjdk.dynalink.supportのメソッド修飾子と型メソッド説明voidAbstractRelinkableCallSite.initialize(MethodHandle relinkAndInvoke) voidChainedCallSite.relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) voidSimpleRelinkableCallSite.relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) voidChainedCallSite.resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) voidSimpleRelinkableCallSite.resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)