クラスjava.lang.invoke.MethodHandle
の使用
MethodHandleを使用するパッケージ
パッケージ
説明
java.lang.invokeパッケージは、Java Virtual Machineとやりとりするための低レベルのプリミティブを提供します。java.lang.runtimeパッケージでは、Java言語の低レベルのランタイム・サポートが提供されます。invokedynamicコール・サイトをリンクするためのインタフェースとクラスが含まれています。通常のJavaオブジェクト用のリンカーを含みます。
独自の言語固有のオブジェクト・モデルと型変換を実装するために、言語ランタイムに必要なインタフェースとクラスが含まれています。
言語ランタイムが、言語固有のオブジェクト・モデルを実装し、いくつかのクラスの基本的な実装とさまざまなユーティリティを提供することによってコンバージョンをより便利にするクラスが含まれています。
Dynalinkをより便利にするクラスが含まれています。クラスの基本的な実装だけでなく、さまざまなユーティリティを提供します。
Javaから直接、低レベルで効率的な外部メモリー/ファンクション・アクセスをサポートするクラス。
-
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つの配列引数を受け取り、その要素を複数の定位置引数に分配するような、配列分配メソッド・ハンドルを作成します。MethodHandle.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命令と同等のメソッド・ハンドルを生成します。ConstantCallSite.dynamicInvoker()このコール・サイトの永続的なターゲットを返します。MutableCallSite.dynamicInvoker()このコール・サイトにリンクされているinvokedynamic命令と同等のメソッド・ハンドルを生成します。VolatileCallSite.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()このコール・サイトの特定のクラスで定義された動作に従って、コール・サイトのターゲット・メソッドを返します。ConstantCallSite.getTarget()コール・サイトのターゲット・メソッドを返しますが、これは、ConstantCallSiteのfinalフィールドのように振る舞います。MutableCallSite.getTarget()コール・サイトのターゲット・メソッドを返しますが、これは、MutableCallSiteの通常のフィールドのように振る舞います。VolatileCallSite.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.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)関連付けられたアクセス・モードの型が指定された型と互換性のあるVarHandle上で、シグネチャ・ポリモーフィック・アクセス・モード・メソッドを呼び出すために使用できる特別な「呼び出しメソッドhandle」を生成します。static MethodHandleMethodHandles.varHandleInvoker(VarHandle.AccessMode accessMode, MethodType type)関連付けられたアクセス・モードの型が指定された型と互換性のあるVarHandle上で、シグネチャ・ポリモーフィック・アクセス・モード・メソッドを呼び出すために使用できる特別な「呼び出しメソッドhandle」を生成します。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 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 MethodHandleMethodHandles.filterReturnValue(MethodHandle target, MethodHandle filter)ターゲット・メソッド・ハンドルを適応させるため、その戻り値(存在する場合)をフィルタ(別のメソッド・ハンドル)で後処理します。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 invokedName, MethodType invokedType, MethodType samMethodType, MethodHandle implMethod, MethodType instantiatedMethodType)適切な型適応および引数の部分評価の後、指定された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)このコール・サイトの特定のクラスで定義された動作に従って、このコール・サイトのターゲット・メソッドを更新します。voidConstantCallSite.setTarget(MethodHandle ignore)常にUnsupportedOperationExceptionをスローします。voidMutableCallSite.setTarget(MethodHandle newTarget)このコール・サイトのターゲット・メソッドを通常の変数として更新します。voidVolatileCallSite.setTarget(MethodHandle newTarget)このコール・サイトのターゲット・メソッドをvolatile変数として更新します。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)ガードとして使用するためのメソッド・ハンドルを取得し、リクエストされた型に適合させますが、ブール値を返します。static MethodHandleGuards.asType(LinkerServices linkerServices, MethodHandle test, MethodType type)ガードとして使用するためのメソッド・ハンドルを取得し、リクエストされた型に適合させますが、ブール値を返します。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)正確な特定のクラスであるために唯一の引数をテストするガード・メソッドを作成します。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)指定された型の引数を持つがboolean戻り値を持つガード・メソッド・ハンドルを作成します。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)ガードとして使用するためのメソッド・ハンドルを取得し、リクエストされた型に適合させますが、ブール値を返します。static MethodHandleGuards.asType(LinkerServices linkerServices, MethodHandle test, MethodType type)ガードとして使用するためのメソッド・ハンドルを取得し、リクエストされた型に適合させますが、ブール値を返します。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) -
jdk.incubator.foreignでのMethodHandleの使用
修飾子と型メソッド説明default MethodHandleMemoryLayout.bitOffsetHandle(MemoryLayout.PathElement... elements)指定されたレイアウト・パスで選択されたレイアウトのオフセットをビット単位でコンピュートするために使用できるメソッド・ハンドルを作成します。この場合、パスはこのレイアウト内でルートとみなされます。default MethodHandleMemoryLayout.byteOffsetHandle(MemoryLayout.PathElement... elements)指定されたレイアウト・パスで選択されたレイアウトのオフセットをバイト単位でコンピュートするために使用できるメソッド・ハンドルを作成します。このパスは、このレイアウト内ではルートとみなされます。CLinker.downcallHandle(Addressable symbol, MethodType type, FunctionDescriptor function)指定された型の外部メソッド・ハンドルを取得します。このハンドルを使用して、指定されたアドレスでターゲット外部ファンクションをコールし、指定されたファンクション記述子を指定できます。型MethodHandleのパラメータを持つjdk.incubator.foreignのメソッド修飾子と型メソッド説明static VarHandleMemoryHandles.collectCoordinates(VarHandle target, int pos, MethodHandle filter)フィルタ(メソッド・ハンドル)を使用して座標値のサブ・シーケンスを前処理することで、ターゲット変数ハンドルを適応させます。static VarHandleMemoryHandles.filterCoordinates(VarHandle target, int pos, MethodHandle... filters)単項フィルタ関数を使用して着信座標値を前処理することで、ターゲット変数ハンドルを適応させます。static VarHandleMemoryHandles.filterValue(VarHandle target, MethodHandle filterToTarget, MethodHandle filterFromTarget)フィルタ関数のペアを使用して受信値と送信値を事前処理することで、ターゲット変数ハンドルを適応させます。CLinker.upcallStub(MethodHandle target, FunctionDescriptor function)ベース・アドレス(MemorySegment.address()を参照してください)を他の外部ファンクション(関数ポインタとして)に渡すことができるネイティブ・セグメントを割り当てます。このようなファンクション・ポインタをネイティブ・コードからコールすると、指定されたメソッド・ハンドルが実行されます。