クラスjava.lang.invoke.MethodHandle
の使用
パッケージ
説明
java.lang.invoke
パッケージは、Java Virtual Machineとやりとりするための低レベルのプリミティブを提供します。java.lang.runtime
パッケージでは、Java言語の低レベルのランタイム・サポートが提供されます。invokedynamic
コール・サイトをリンクするためのインタフェースとクラスが含まれています。通常のJavaオブジェクト用のリンカーを含みます。
独自の言語固有のオブジェクト・モデルと型変換を実装するために、言語ランタイムに必要なインタフェースとクラスが含まれています。
言語ランタイムが、言語固有のオブジェクト・モデルを実装し、いくつかのクラスの基本的な実装とさまざまなユーティリティを提供することによってコンバージョンをより便利にするクラスが含まれています。
Dynalinkをより便利にするクラスが含まれています。クラスの基本的な実装だけでなく、さまざまなユーティリティを提供します。
Javaから直接、低レベルで効率的な外部メモリー/ファンクション・アクセスをサポートするクラス。
-
java.lang.invokeでのMethodHandleの使用
修飾子と型メソッド説明static MethodHandle
MethodHandles.arrayConstructor(Class<?> arrayClass)
anewarray
バイトコードの場合と同様に、必要な型の配列を構築するメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.arrayElementGetter(Class<?> arrayClass)
aaload
バイトコードの場合と同様に、配列の要素に対する読み取りアクセスを提供するメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.arrayElementSetter(Class<?> arrayClass)
astore
バイトコードの場合と同様に、配列の要素への書き込みアクセスを与えるメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.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 MethodHandle
MethodHandles.catchException(MethodHandle target, Class<? extends Throwable> exType, MethodHandle handler)
ターゲットのメソッド・ハンドルを例外ハンドラの内部で実行することによって、このターゲットを適応させるメソッド・ハンドルを作成します。static MethodHandle
MethodHandles.collectArguments(MethodHandle target, int pos, MethodHandle filter)
ターゲット・メソッド・ハンドルを、フィルタ(別のメソッド・ハンドル)でその引数のサブシーケンスを前処理することにより、適応させます。static MethodHandle
要求された戻り値の型を持ち、呼び出されるたびに指定された定数値を返すメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.countedLoop(MethodHandle iterations, MethodHandle init, MethodHandle body)
指定された回数の反復を実行するループを構築します。static MethodHandle
MethodHandles.countedLoop(MethodHandle start, MethodHandle end, MethodHandle init, MethodHandle body)
一連の数値をカウントするループを構築します。static MethodHandle
MethodHandles.doWhileLoop(MethodHandle init, MethodHandle body, MethodHandle pred)
初期化子、本文、述語からdo-while
ループを構築します。static MethodHandle
MethodHandles.dropArguments(MethodHandle target, int pos, Class<?>... valueTypes)
いくつかのダミー引数を破棄してから指定された別のtargetメソッド・ハンドルを呼び出すメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.dropArguments(MethodHandle target, int pos, List<Class<?>> valueTypes)
いくつかのダミー引数を破棄してから指定された別のtargetメソッド・ハンドルを呼び出すメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.dropArgumentsToMatch(MethodHandle target, int skip, List<Class<?>> newTypes, int pos)
指定されたパラメータ型に一致するように、ターゲット・メソッド・ハンドルを適合させます。static MethodHandle
MethodHandles.dropReturn(MethodHandle target)
ターゲット・ハンドル(もしあれば)の戻り値を削除します。abstract MethodHandle
CallSite.dynamicInvoker()
このコール・サイトにリンクされているinvokedynamic命令と同等のメソッド・ハンドルを生成します。ConstantCallSite.dynamicInvoker()
このコール・サイトの永続的なターゲットを返します。MutableCallSite.dynamicInvoker()
このコール・サイトにリンクされているinvokedynamic命令と同等のメソッド・ハンドルを生成します。VolatileCallSite.dynamicInvoker()
このコール・サイトにリンクされているinvokedynamic命令と同等のメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.empty(MethodType type)
任意の引数を無視し、何もせず、戻り値の型に応じて適切な既定値を返す、リクエストされた型のメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.exactInvoker(MethodType type)
特殊なインボーカ・メソッド・ハンドルを生成します(これを使用すれば、指定された型の任意のメソッド・ハンドルを、invokeExact
を使用する場合と同様に呼び出すことができる)。static MethodHandle
MethodHandles.explicitCastArguments(MethodHandle target, MethodType newType)
指定されたメソッド・ハンドルの型を新しい型に適応させるために、引数と戻り値の型の変換をペア単位で行うメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.filterArguments(MethodHandle target, int pos, MethodHandle... filters)
ターゲット・メソッド・ハンドルを適応させるため、その1つ以上の引数をそれぞれ固有の単項フィルタ関数を使って前処理したあと、前処理を行った各引数を対応するフィルタ関数の結果で置き換えてターゲットを呼び出します。static MethodHandle
MethodHandles.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 MethodHandle
MethodHandles.foldArguments(MethodHandle target, int pos, MethodHandle combiner)
指定された位置から開始し、前処理の結果でターゲットを呼び出し、折りたたまれた引数の直前の引数の元のシーケンスに挿入して、引数の一部を前処理することによって、ターゲット・メソッド・ハンドルを修正します。static MethodHandle
MethodHandles.foldArguments(MethodHandle target, MethodHandle combiner)
ターゲット・メソッド・ハンドルを適応させるため、その引数のいくつかを前処理したあと、前処理の結果を元の一連の引数内に挿入してターゲットを呼び出します。abstract MethodHandle
CallSite.getTarget()
このコール・サイトの特定のクラスで定義された動作に従って、コール・サイトのターゲット・メソッドを返します。ConstantCallSite.getTarget()
コール・サイトのターゲット・メソッドを返しますが、これは、ConstantCallSite
のfinal
フィールドのように振る舞います。MutableCallSite.getTarget()
コール・サイトのターゲット・メソッドを返しますが、これは、MutableCallSite
の通常のフィールドのように振る舞います。VolatileCallSite.getTarget()
コール・サイトのターゲット・メソッドを返しますが、これは、VolatileCallSite
のvolatile
フィールドのように振る舞います。static MethodHandle
MethodHandles.guardWithTest(MethodHandle test, MethodHandle target, MethodHandle fallback)
テスト(boolean値のメソッド・ハンドル)で保護することでターゲット・メソッド・ハンドルを適応させるメソッド・ハンドルを作成します。SwitchPoint.guardWithTest(MethodHandle target, MethodHandle fallback)
常にターゲット、フォール・バックのいずれかに委譲するメソッド・ハンドルを返します。static MethodHandle
呼出し時に唯一の引数の値を返すメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.insertArguments(MethodHandle target, int pos, Object... values)
ターゲット・メソッド・ハンドルの呼出しの前に、1つ以上のバインド引数をメソッド・ハンドルに提供します。static MethodHandle
MethodHandles.invoker(MethodType type)
特殊なインボーカ・メソッド・ハンドルを生成します(これを使用すれば、指定された型と互換性のある任意のメソッド・ハンドルを、invoke
を使用する場合と同様に呼び出すことができる)。static MethodHandle
MethodHandles.iteratedLoop(MethodHandle iterator, MethodHandle init, MethodHandle body)
Iterator<T>
によって生成された値の範囲にあるループを構築します。static MethodHandle
MethodHandles.loop(MethodHandle[]... clauses)
各反復時に更新およびチェックされる複数のループ変数を持つループを表すメソッド・ハンドルを作成します。static MethodHandle
MethodHandles.permuteArguments(MethodHandle target, MethodType newType, int... reorder)
引数の順序を変更することによって、指定されたメソッド・ハンドルの呼出し順序を新しい型に適応させるメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.spreadInvoker(MethodType type, int leadingArgCount)
指定されたtype
の任意のメソッド・ハンドルを呼び出すメソッド・ハンドルを生成しますが、その際、指定された数の末尾の引数が単一の末尾のObject[]
配列で置き換えられます。static MethodHandle
MethodHandles.throwException(Class<?> returnType, Class<? extends Throwable> exType)
指定されたexType
の例外をスローするメソッド・ハンドルを生成します。VarHandle.toMethodHandle(VarHandle.AccessMode accessMode)
このVarHandleおよび指定されたアクセス・モードにバインドされたメソッド・ハンドルを取得します。static MethodHandle
MethodHandles.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 MethodHandle
MethodHandles.varHandleExactInvoker(VarHandle.AccessMode accessMode, MethodType type)
関連付けられたアクセス・モードの型が指定された型と互換性のあるVarHandle上で、シグネチャ・ポリモーフィック・アクセス・モード・メソッドを呼び出すために使用できる特別な「呼び出しメソッドhandle」を生成します。static MethodHandle
MethodHandles.varHandleInvoker(VarHandle.AccessMode accessMode, MethodType type)
関連付けられたアクセス・モードの型が指定された型と互換性のあるVarHandle上で、シグネチャ・ポリモーフィック・アクセス・モード・メソッドを呼び出すために使用できる特別な「呼び出しメソッドhandle」を生成します。static MethodHandle
MethodHandles.whileLoop(MethodHandle init, MethodHandle pred, MethodHandle body)
初期化子、本文、述語からwhile
ループを構築します。MethodHandle.withVarargs(boolean makeVarargs)
static MethodHandle
MethodHandleProxies.wrapperInstanceTarget(Object x)
このラッパー・インスタンスの一意のメソッドと動作が同等であるターゲット・メソッド・ハンドルを生成または回復します。static MethodHandle
呼び出されるたびにその型のデフォルト値を返すリクエストされた戻り値型の定数メソッド・ハンドルを生成します。修飾子と型メソッド説明static <T> T
MethodHandleProxies.asInterfaceInstance(Class<T> intfc, MethodHandle target)
指定されたメソッド・ハンドルに呼出しをリダイレクトする、指定された単一メソッド・インタフェースのインスタンスを生成します。static MethodHandle
MethodHandles.catchException(MethodHandle target, Class<? extends Throwable> exType, MethodHandle handler)
ターゲットのメソッド・ハンドルを例外ハンドラの内部で実行することによって、このターゲットを適応させるメソッド・ハンドルを作成します。static MethodHandle
MethodHandles.collectArguments(MethodHandle target, int pos, MethodHandle filter)
ターゲット・メソッド・ハンドルを、フィルタ(別のメソッド・ハンドル)でその引数のサブシーケンスを前処理することにより、適応させます。static MethodHandle
MethodHandles.countedLoop(MethodHandle iterations, MethodHandle init, MethodHandle body)
指定された回数の反復を実行するループを構築します。static MethodHandle
MethodHandles.countedLoop(MethodHandle start, MethodHandle end, MethodHandle init, MethodHandle body)
一連の数値をカウントするループを構築します。static MethodHandle
MethodHandles.doWhileLoop(MethodHandle init, MethodHandle body, MethodHandle pred)
初期化子、本文、述語からdo-while
ループを構築します。static MethodHandle
MethodHandles.dropArguments(MethodHandle target, int pos, Class<?>... valueTypes)
いくつかのダミー引数を破棄してから指定された別のtargetメソッド・ハンドルを呼び出すメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.dropArguments(MethodHandle target, int pos, List<Class<?>> valueTypes)
いくつかのダミー引数を破棄してから指定された別のtargetメソッド・ハンドルを呼び出すメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.dropArgumentsToMatch(MethodHandle target, int skip, List<Class<?>> newTypes, int pos)
指定されたパラメータ型に一致するように、ターゲット・メソッド・ハンドルを適合させます。static MethodHandle
MethodHandles.dropReturn(MethodHandle target)
ターゲット・ハンドル(もしあれば)の戻り値を削除します。static MethodHandle
MethodHandles.explicitCastArguments(MethodHandle target, MethodType newType)
指定されたメソッド・ハンドルの型を新しい型に適応させるために、引数と戻り値の型の変換をペア単位で行うメソッド・ハンドルを生成します。static MethodHandle
MethodHandles.filterArguments(MethodHandle target, int pos, MethodHandle... filters)
ターゲット・メソッド・ハンドルを適応させるため、その1つ以上の引数をそれぞれ固有の単項フィルタ関数を使って前処理したあと、前処理を行った各引数を対応するフィルタ関数の結果で置き換えてターゲットを呼び出します。static MethodHandle
MethodHandles.filterReturnValue(MethodHandle target, MethodHandle filter)
ターゲット・メソッド・ハンドルを適応させるため、その戻り値(存在する場合)をフィルタ(別のメソッド・ハンドル)で後処理します。static MethodHandle
MethodHandles.foldArguments(MethodHandle target, int pos, MethodHandle combiner)
指定された位置から開始し、前処理の結果でターゲットを呼び出し、折りたたまれた引数の直前の引数の元のシーケンスに挿入して、引数の一部を前処理することによって、ターゲット・メソッド・ハンドルを修正します。static MethodHandle
MethodHandles.foldArguments(MethodHandle target, MethodHandle combiner)
ターゲット・メソッド・ハンドルを適応させるため、その引数のいくつかを前処理したあと、前処理の結果を元の一連の引数内に挿入してターゲットを呼び出します。static MethodHandle
MethodHandles.guardWithTest(MethodHandle test, MethodHandle target, MethodHandle fallback)
テスト(boolean値のメソッド・ハンドル)で保護することでターゲット・メソッド・ハンドルを適応させるメソッド・ハンドルを作成します。SwitchPoint.guardWithTest(MethodHandle target, MethodHandle fallback)
常にターゲット、フォール・バックのいずれかに委譲するメソッド・ハンドルを返します。static MethodHandle
MethodHandles.insertArguments(MethodHandle target, int pos, Object... values)
ターゲット・メソッド・ハンドルの呼出しの前に、1つ以上のバインド引数をメソッド・ハンドルに提供します。static Object
ConstantBootstraps.invoke(MethodHandles.Lookup lookup, String name, Class<?> type, MethodHandle handle, Object... args)
指定された引数を使ってメソッド・ハンドルを呼び出した結果を返します。static MethodHandle
MethodHandles.iteratedLoop(MethodHandle iterator, MethodHandle init, MethodHandle body)
Iterator<T>
によって生成された値の範囲にあるループを構築します。static MethodHandle
MethodHandles.loop(MethodHandle[]... clauses)
各反復時に更新およびチェックされる複数のループ変数を持つループを表すメソッド・ハンドルを作成します。static CallSite
LambdaMetafactory.metafactory(MethodHandles.Lookup caller, String invokedName, MethodType invokedType, MethodType samMethodType, MethodHandle implMethod, MethodType instantiatedMethodType)
適切な型適応および引数の部分評価の後、指定されたMethodHandle
への委譲により、1つ以上のインタフェースを実装する単純な関数オブジェクトの作成を容易にします。static MethodHandle
MethodHandles.permuteArguments(MethodHandle target, MethodType newType, int... reorder)
引数の順序を変更することによって、指定されたメソッド・ハンドルの呼出し順序を新しい型に適応させるメソッド・ハンドルを生成します。static <T extends Member>
TMethodHandles.reflectAs(Class<T> expected, MethodHandle target)
直接メソッド・ハンドルの未チェックの解読を実行します。MethodHandles.Lookup.revealDirect(MethodHandle target)
この参照オブジェクトまたは類似のオブジェクトによって作成された直接メソッド・ハンドルを解読します。abstract void
CallSite.setTarget(MethodHandle newTarget)
このコール・サイトの特定のクラスで定義された動作に従って、このコール・サイトのターゲット・メソッドを更新します。void
ConstantCallSite.setTarget(MethodHandle ignore)
常にUnsupportedOperationException
をスローします。void
MutableCallSite.setTarget(MethodHandle newTarget)
このコール・サイトのターゲット・メソッドを通常の変数として更新します。void
VolatileCallSite.setTarget(MethodHandle newTarget)
このコール・サイトのターゲット・メソッドをvolatile変数として更新します。static MethodHandle
MethodHandles.tryFinally(MethodHandle target, MethodHandle cleanup)
target
メソッドのハンドルをtry-finally
ブロックにラップすることによって処理するメソッド・ハンドルを作成します。static MethodHandle
MethodHandles.whileLoop(MethodHandle init, MethodHandle pred, MethodHandle body)
初期化子、本文、述語からwhile
ループを構築します。修飾子コンストラクタ説明ConstantCallSite(MethodHandle target)
永続的なターゲットを持つコール・サイトを作成します。protected
ConstantCallSite(MethodType targetType, MethodHandle createTargetHook)
永続的なターゲットを持つコール・サイトを作成します(コール・サイト自体にバインドされる場合があります)。MutableCallSite(MethodHandle target)
初期ターゲット・メソッド・ハンドルを持つコール・サイト・オブジェクトを作成します。VolatileCallSite(MethodHandle target)
ターゲットへのvolatileバインディングを持つコール・サイトを作成します。 -
java.lang.runtimeでのMethodHandleの使用
修飾子と型メソッド説明static Object
ObjectMethods.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の使用
修飾子と型メソッド説明void
RelinkableCallSite.initialize(MethodHandle relinkAndInvoke)
再リンク呼び出しメソッドのハンドルを設定して、再リンク可能な呼び出しサイトを初期化するために動的リンカーによって呼び出されます。void
RelinkableCallSite.relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
このメソッドは、呼び出しサイトが再リンクされるたびに動的リンカーによって呼び出されます。(例外についてはRelinkableCallSite.resetAndRelink(GuardedInvocation, MethodHandle)
を参照してください)。void
RelinkableCallSite.resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
このメソッドは、コール・サイトが再リンクされるたびにダイナミック・リンカーによって呼び出され、リンカーはコール・サイトが以前のリンケージ・ステート(それはRelinkableCallSite.relink(GuardedInvocation, MethodHandle)
とどのように違うのですか?)を破棄することを望みます。 -
jdk.dynalink.beansでのMethodHandleの使用
修飾子と型メソッド説明MissingMemberHandlerFactory.createMissingMemberHandler(LinkRequest linkRequest, LinkerServices linkerServices)
特定のリンク・リクエストに対する不足しているメンバーの動作を実装するのに適したメソッド・ハンドルを返します。 -
jdk.dynalink.linkerでのMethodHandleの使用
修飾子と型メソッド説明LinkerServices.asType(MethodHandle handle, MethodType fromType)
asType(MethodType)
と同様に、使用可能なすべてのGuardingTypeConverterFactory
実装によって生成されたメソッド・ハンドルをフックし、言語固有の型のパラメータの強制変換を提供します。MethodTypeConversionStrategy.asType(MethodHandle target, MethodType newType)
メソッド・ハンドルを新しい型に変換します。default MethodHandle
LinkerServices.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)
メソッド・ハンドルを変換します。修飾子と型メソッド説明LinkerServices.asType(MethodHandle handle, MethodType fromType)
asType(MethodType)
と同様に、使用可能なすべてのGuardingTypeConverterFactory
実装によって生成されたメソッド・ハンドルをフックし、言語固有の型のパラメータの強制変換を提供します。MethodTypeConversionStrategy.asType(MethodHandle target, MethodType newType)
メソッド・ハンドルを新しい型に変換します。default MethodHandle
LinkerServices.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)
メソッド・ハンドルを変換します。修飾子コンストラクタ説明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 MethodHandle
Guards.asType(MethodHandle test, MethodType type)
ガードとして使用するためのメソッド・ハンドルを取得し、リクエストされた型に適合させますが、ブール値を返します。static MethodHandle
Guards.asType(LinkerServices linkerServices, MethodHandle test, MethodType type)
ガードとして使用するためのメソッド・ハンドルを取得し、リクエストされた型に適合させますが、ブール値を返します。Lookup.findGetter(Class<?> refc, String name, Class<?> type)
static MethodHandle
Lookup.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 MethodHandle
Lookup.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 MethodHandle
Guards.getClassGuard(Class<?> clazz)
正確な特定のクラスであるために唯一の引数をテストするガード・メソッドを作成します。static MethodHandle
Guards.getIdentityGuard(Object obj)
他のオブジェクトと同じ参照を持つために唯一の引数をテストするガード・メソッドを作成static MethodHandle
Guards.getInstanceOfGuard(Class<?> clazz)
特定のクラスのインスタンスであるために唯一の引数をテストするガード・メソッドを作成します。static MethodHandle
Guards.isArray(int pos, MethodType type)
指定された位置の引数がJava配列の場合にtrueを返すメソッド・ハンドルを作成します。static MethodHandle
Guards.isInstance(Class<?> clazz, int pos, MethodType type)
指定された型の引数を持つメソッド・ハンドルを作成しますが、ブール型の戻り値を持ちます。static MethodHandle
Guards.isInstance(Class<?> clazz, MethodType type)
指定された型の引数を持つメソッド・ハンドルを作成しますが、ブール型の戻り値を持ちます。static MethodHandle
Guards.isNotNull()
最初の引数がnullでないかどうかを調べるガードを返します。static MethodHandle
Guards.isNull()
最初の引数がnullかどうかを調べるガードを返します。static MethodHandle
Guards.isOfClass(Class<?> clazz, MethodType type)
指定された型の引数を持つがboolean戻り値を持つガード・メソッド・ハンドルを作成します。DefaultInternalObjectFilter.transform(MethodHandle target)
static MethodHandle
Lookup.unreflect(MethodHandles.Lookup lookup, Method m)
static MethodHandle
Lookup.unreflectConstructor(MethodHandles.Lookup lookup, Constructor<?> c)
Lookup.unreflectConstructor(Constructor<?> c)
Lookup.unreflectGetter(Field f)
Lookup.unreflectSetter(Field f)
修飾子と型メソッド説明static MethodHandle
Guards.asType(MethodHandle test, MethodType type)
ガードとして使用するためのメソッド・ハンドルを取得し、リクエストされた型に適合させますが、ブール値を返します。static MethodHandle
Guards.asType(LinkerServices linkerServices, MethodHandle test, MethodType type)
ガードとして使用するためのメソッド・ハンドルを取得し、リクエストされた型に適合させますが、ブール値を返します。DefaultInternalObjectFilter.transform(MethodHandle target)
修飾子コンストラクタ説明DefaultInternalObjectFilter(MethodHandle parameterFilter, MethodHandle returnFilter)
新しいフィルタを作成します。 -
jdk.dynalink.supportでのMethodHandleの使用
修飾子と型メソッド説明void
AbstractRelinkableCallSite.initialize(MethodHandle relinkAndInvoke)
void
ChainedCallSite.relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
void
SimpleRelinkableCallSite.relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
void
ChainedCallSite.resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
void
SimpleRelinkableCallSite.resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke)
-
jdk.incubator.foreignでのMethodHandleの使用
修飾子と型メソッド説明default MethodHandle
MemoryLayout.bitOffsetHandle(MemoryLayout.PathElement... elements)
指定されたレイアウト・パスで選択されたレイアウトのオフセットをビット単位でコンピュートするために使用できるメソッド・ハンドルを作成します。この場合、パスはこのレイアウト内でルートとみなされます。default MethodHandle
MemoryLayout.byteOffsetHandle(MemoryLayout.PathElement... elements)
指定されたレイアウト・パスで選択されたレイアウトのオフセットをバイト単位でコンピュートするために使用できるメソッド・ハンドルを作成します。このパスは、このレイアウト内ではルートとみなされます。CLinker.downcallHandle(Addressable symbol, MethodType type, FunctionDescriptor function)
指定された型の外部メソッド・ハンドルを取得します。このハンドルを使用して、指定されたアドレスでターゲット外部ファンクションをコールし、指定されたファンクション記述子を指定できます。修飾子と型メソッド説明static VarHandle
MemoryHandles.collectCoordinates(VarHandle target, int pos, MethodHandle filter)
フィルタ(メソッド・ハンドル)を使用して座標値のサブ・シーケンスを前処理することで、ターゲット変数ハンドルを適応させます。static VarHandle
MemoryHandles.filterCoordinates(VarHandle target, int pos, MethodHandle... filters)
単項フィルタ関数を使用して着信座標値を前処理することで、ターゲット変数ハンドルを適応させます。static VarHandle
MemoryHandles.filterValue(VarHandle target, MethodHandle filterToTarget, MethodHandle filterFromTarget)
フィルタ関数のペアを使用して受信値と送信値を事前処理することで、ターゲット変数ハンドルを適応させます。CLinker.upcallStub(MethodHandle target, FunctionDescriptor function)
ベース・アドレス(MemorySegment.address()
を参照してください)を他の外部ファンクション(関数ポインタとして)に渡すことができるネイティブ・セグメントを割り当てます。このようなファンクション・ポインタをネイティブ・コードからコールすると、指定されたメソッド・ハンドルが実行されます。