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

インタフェースLinkerServices

    • メソッドの詳細

      • 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)