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...)
およびMethodHandles.filterReturnValue(MethodHandle, MethodHandle)
とGuardingTypeConverterFactory
で生成された型コンバータをフィルタとして適切な組合せとするメソッド・ハンドル。
-
asTypeLosslessReturn
default MethodHandle asTypeLosslessReturn(MethodHandle handle, MethodType fromType) asType(MethodHandle, MethodType)
と同様ですが、戻り値の型変換を特に処理します。 メソッド・ハンドルの戻り型は、精度も大きさも失わない変換を使用して実行できる場合にのみ変換され、それ以外の場合は変更されません。 これらは、個々の言語固有のリンカーで実行する必要がある唯一の戻り値変換であり、pre-link transformer of the dynamic linker
は、呼出しサイトが存在する言語ランタイムに固有の方法で、潜在的に損失のある戻り型変換を処理するための戦略を実装する必要があります。- パラメータ:
handle
- ターゲット・メソッド・ハンドルfromType
- ソース引数の型- 戻り値:
MethodHandle.asType(MethodType)
とMethodHandles.filterArguments(MethodHandle, int, MethodHandle...)
の適切な組合せであり、GuardingTypeConverterFactory
で生成された型コンバータをフィルタとして使用するメソッド・ハンドル。
-
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
- アクションまたはlookupSupplierのいずれかがnullの場合。- 関連項目:
-