public interface LinkerServices
それらを所有する
DynamicLinker
によってGuardingDynamicLinker
インスタンスに提供されるサービスのインタフェース。-
メソッドのサマリー
修飾子と型メソッド説明asType
(MethodHandle handle, MethodType fromType) MethodHandle.asType(MethodType)
と同様に、使用可能なすべてのGuardingTypeConverterFactory
実装によって生成されたメソッド・ハンドルをフックし、言語固有の型のパラメータの強制変換を提供します。default MethodHandle
asTypeLosslessReturn
(MethodHandle handle, MethodType fromType) asType(MethodHandle, MethodType)
と似ていますが、戻り値の型変換を特別に扱います。boolean
canConvert
(Class<?> from, Class<?> to) リクエストされた型(自動JVM変換、または使用可能なGuardingTypeConverterFactory
によって提供される変換)の間に変換が存在する場合はtrueを返し、リクエストされた型間の変換が確実に存在しない場合はfalseを返します。compareConversion
(Class<?> sourceType, Class<?> targetType1, Class<?> targetType2) ソース型から2つのターゲット型への2つの型変換のどちらを優先するかを決定します。filterInternalObjects
(MethodHandle target) 潜在的に内部言語ランタイム・オブジェクトを受け取ることができるパラメータにフィルタを追加して、潜在的にそれらをラップすることによってエスケープしないように、メソッド・ハンドルを変更します。getGuardedInvocation
(LinkRequest linkRequest) このリンカー・サービス・オブジェクトを公開するDynamicLinker
に委譲された保護された呼び出しを作成します。getTypeConverter
(Class<?> sourceType, Class<?> targetType) ソースとターゲットの型を指定すると、それらの間で変換を行うメソッド・ハンドルが返されます。<T> T
getWithLookup
(Supplier<T> operation, SecureLookupSupplier lookupSupplier) 特定のMethodHandles.Lookup
検索オブジェクトのコンテキスト内で操作を実行します。
-
メソッドの詳細
-
asType
MethodHandle asType(MethodHandle handle, MethodType fromType) MethodHandle.asType(MethodType)
と同様に、使用可能なすべてのGuardingTypeConverterFactory
実装によって生成されたメソッド・ハンドルをフックし、言語固有の型のパラメータの強制変換を提供します。 すべてのプリミティブからプリミティブ、ラッパーからプリミティブ、プリミティブからラッパーへの変換だけでなく、すべてのアップ・キャストでもMethodHandle.asType(MethodType)
が適用されます。 他のすべての変換では、GuardingTypeConverterFactory
実装によって提供される複合フィルタを使用してMethodHandles.filterArguments(MethodHandle, int, MethodHandle...)
を挿入します。- パラメータ:
handle
- ターゲット・メソッド・ハンドルfromType
- ソース引数の型- 戻り値:
MethodHandle.asType(MethodType)
、MethodHandles.filterArguments(MethodHandle, int, MethodHandle...)
、およびGuardingTypeConverterFactory
で生成された型変換器をフィルタとして使用するMethodHandles.filterReturnValue(MethodHandle, MethodHandle)
の適切な組み合わせであるメソッド・ハンドル。
-
asTypeLosslessReturn
default MethodHandle asTypeLosslessReturn(MethodHandle handle, MethodType fromType) asType(MethodHandle, MethodType)
と似ていますが、戻り値の型変換を特別に扱います。 それは精度と大きさのどちらも失わない変換を使用して行うことができる場合にのみメソッド・ハンドルの戻り値の型を変換します。そうでなければ、それは変更されません。 これは、個々の言語固有のリンカーによって実行される唯一の戻り値変換であり、pre-link transformer of the dynamic linker
は、呼び出しサイトが存在する言語ランタイムに固有の方法で、潜在的に損失のある戻り型変換を処理するための戦略を実装する必要があります。- パラメータ:
handle
- ターゲット・メソッド・ハンドルfromType
- ソース引数の型- 戻り値:
MethodHandle.asType(MethodType)
とGuardingTypeConverterFactory
で生成された型変換器をMethodHandles.filterArguments(MethodHandle, int, MethodHandle...)
とフィルタの組み合わせとして適切に組み合わせたメソッド・ハンドルです。
-
getTypeConverter
MethodHandle getTypeConverter(Class<?> sourceType, Class<?> targetType) ソースとターゲットの型を指定すると、それらの間で変換を行うメソッド・ハンドルが返されます。 決してnullを返しません。最悪の場合、恒等変換(実行時に一部の値が失敗する可能性があります)を返します。 このメソッドを直接使用することはほとんどありません。ほとんどの場合、代わりにasType(MethodHandle, MethodType)
を使用する必要があります。 このメソッドは、既存の型変換機構をリンク・リクエストの処理のコンテキスト外で再利用する必要がある場合に必要です。- パラメータ:
sourceType
- 変換元の型targetType
- 変換先の型- 戻り値:
- 変換を実行するメソッド・ハンドル。
-
canConvert
リクエストされた型(自動JVM変換、または使用可能なGuardingTypeConverterFactory
によって提供される変換)の間に変換が存在する場合はtrueを返し、リクエストされた型間の変換が確実に存在しない場合はfalseを返します。 trueを返すと、すべての値(特に"from"または"to"型が十分に一般的である場合)の実行時に変換が成功することは保証されませんが、falseを返すと失敗することが保証されます。- パラメータ:
from
- 変換のソース型to
- 変換のターゲット型- 戻り値:
- 変換が可能な場合はtrue、できない場合はfalse。
-
getGuardedInvocation
このリンカー・サービス・オブジェクトを公開するDynamicLinker
に委譲された保護された呼び出しを作成します。 ダイナミック・リンカーはそれ自身、リンクされているすべての管理されたGuardingDynamicLinker
へのリンクを委任します。リンカーが以前に応答しなかった場合、潜在的にこれを含み、無限再帰に注意してください。 通常、現在リンクしようとしているものと異なるようにリンク・リクエストを作成します。- パラメータ:
linkRequest
- 呼び出しをリンクするリクエスト- 戻り値:
- トップレベルのダイナミック・リンカーによって管理されているガード・ダイナミック・リンカーのいくつかによってリンクされたガードされた呼び出しです。 使用可能なリンカーが呼び出しをリンクできない場合はnullになります。 通常、返された呼び出しの要素を使用して、独自の呼び出しを構成します。
- 例外:
Exception
- トップレベルのリンカーが例外をスローした場合
-
compareConversion
ConversionComparator.Comparison compareConversion(Class<?> sourceType, Class<?> targetType1, Class<?> targetType2) ソース型から2つのターゲット型への2つの型変換のどちらを優先するかを決定します。 これは、動的なオーバーロードされたメソッドの解決に使用されます。 ソース型が、メソッド呼び出し変換を伴う厳密に1つのターゲット型に変換可能な場合は選択され、そうでない場合は使用可能なConversionComparator
が参照されます。- パラメータ:
sourceType
- ソース型。targetType1
- 1つの潜在的ターゲット型targetType2
- 別の潜在的なターゲット型。- 戻り値:
- どちらかを設定する比較定数の1つ - もしあれば - 変換にはターゲット型の方が適しています。
-
filterInternalObjects
MethodHandle filterInternalObjects(MethodHandle target) 潜在的に内部言語ランタイム・オブジェクトを受け取ることができるパラメータにフィルタを追加して、潜在的にそれらをラップすることによってエスケープしないように、メソッド・ハンドルを変更します。 また、戻り値にアンラッピング・フィルタを追加することもできます。DynamicLinkerFactory.setInternalObjectsFilter(MethodHandleTransformer)
によって構成されたトランスフォーマを使用して、メソッド・ハンドルを基本的に変換します。- パラメータ:
target
- ターゲット・メソッド・ハンドル- 戻り値:
- ラッピングとアンラッピングのために潜在的にフィルタリングされたパラメータおよび/または戻り値の型を持つメソッド・ハンドル。
-
getWithLookup
<T> T getWithLookup(Supplier<T> operation, SecureLookupSupplier lookupSupplier) 特定のMethodHandles.Lookup
検索オブジェクトのコンテキスト内で操作を実行します。 通常、LinkerServices
のメソッドはリンク機構の一部として呼び出されます。この場合、Dynalinkはスレッドごとに現在のルックアップ(コール・サイトの記述子に属するものがリンクされている)を内部的に保持します。 このルックアップは、ルックアップ・センシティブ・コンバータを生成する必要がある場合、リンクに関係するすべてのGuardingTypeConverterFactory
によって取り出すことができます。 ただし、リンカー・サービス・メソッドは、呼び出し時ディスパッチ・スキームを実装するとき、実行時に変換を呼び出すときなど、リンキング・プロセスの外でも呼び出すことができます。このような状況で任意の型コンバータを使用する必要があり、ルックアップが必要な場合、スレッドがリンク操作に従事していないので、MethodHandles.publicLookup()
を取得するだけです。 意味のある操作を呼び出し元クラスのコンテキストに関連付ける方法がある場合は、このメソッドの呼び出し内で操作を実行し、そのクラスの全強度検索を渡すことを検討してください。操作の継続時間。SecureLookupSupplier
を渡しているので、呼び出された型変換ファクトリは必要なときにルックアップを取得できるように、必要な実行時アクセス権を保持する必要があります。- 型パラメータ:
T
- 渡されたサプライヤが提供する戻り値の型。- パラメータ:
operation
- 指定されたルックアップのコンテキストで実行する操作。lookupSupplier
- ルックアップの安全なサプライヤ- 戻り値:
- アクションの戻り値
- 例外:
NullPointerException
- actionまたはlookupSupplierのいずれかがnullの場合。- 関連項目:
-