-
public interface LinkerServices所有するDynamicLinkerによってGuardingDynamicLinkerインスタンスに提供されるサービスのインタフェース。
-
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 抽象メソッド デフォルト・メソッド 修飾子と型 メソッド 説明 MethodHandleasType(MethodHandle handle, MethodType fromType)MethodHandle.asType(MethodType)と似ていますが、使用可能なすべてのGuardingTypeConverterFactory実装によって生成されるメソッド・ハンドルにもフックがあり、パラメータに言語固有の型強制を提供します。default MethodHandleasTypeLosslessReturn(MethodHandle handle, MethodType fromType)asType(MethodHandle, MethodType)と似ていますが、戻り値の型変換が特別に処理されます。booleancanConvert(Class<?> from, Class<?> to)リクエストされたタイプ(自動JVM変換、または使用可能なGuardingTypeConverterFactoryによって提供されるタイプ)間に変換が存在する場合はtrueを返し、リクエストされたタイプ間に変換が存在しない場合はfalseを返します。ConversionComparator.ComparisoncompareConversion(Class<?> sourceType, Class<?> targetType1, Class<?> targetType2)ソース・タイプから2つのターゲット・タイプへの2つのタイプ変換のうち、どちらが優先されるかを決定します。MethodHandlefilterInternalObjects(MethodHandle target)メソッド・ハンドルを変更し、内部言語のランタイム・オブジェクトを受信できるパラメータにフィルタを追加して、それらをラップすることでエスケープしないようにします。GuardedInvocationgetGuardedInvocation(LinkRequest linkRequest)このリンカーサービスオブジェクトを公開するDynamicLinkerに委任されたガード付き呼び出しを作成します。MethodHandlegetTypeConverter(Class<?> sourceType, Class<?> targetType)ソース・タイプとターゲット・タイプを指定すると、それらの間で変換されるメソッド・ハンドルが返されます。<T> TgetWithLookup(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
boolean canConvert(Class<?> from, Class<?> to)
リクエストされたタイプ(自動JVM変換、または使用可能なGuardingTypeConverterFactoryによって提供されるタイプ)間に変換が存在する場合はtrueを返し、リクエストされたタイプ間に変換が存在しない場合はfalseを返します。 trueを返すと、すべての値(特に「from」または「to」型が十分に汎用的な場合)の実行時に変換が成功することは保証されませんが、falseを返すと失敗することが保証されます。- パラメータ:
from- 変換のソース・タイプto- 変換のターゲット・タイプ- 戻り値:
- 変換が存在する場合はtrue、存在しない場合はfalse。
-
getGuardedInvocation
GuardedInvocation getGuardedInvocation(LinkRequest linkRequest) throws Exception
このリンカーサービスオブジェクトを公開する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の場合。- 関連項目:
GuardingTypeConverterFactory.convertToType(Class, Class, Supplier)
-
-