モジュール jdk.dynalink
パッケージ jdk.dynalink.linker

インタフェースLinkerServices


public interface LinkerServices
所有するDynamicLinkerによってGuardingDynamicLinkerインスタンスに提供されるサービスのインタフェース。
  • メソッドの詳細

    • 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

      このリンカー・サービス・オブジェクトを公開する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の場合。
      関連項目: