モジュール 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...)、および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

      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 - actionまたはlookupSupplierのいずれかがnullの場合。
      関連項目:
      GuardingTypeConverterFactory.convertToType(Class, Class, Supplier)