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

インタフェースGuardingTypeConverterFactory


  • public interface GuardingTypeConverterFactory
    言語固有の型変換機能を提供するために、GuardingDynamicLinker実装で実装できるオプションのインタフェース。 このインタフェースを実装する場合、ConversionComparatorインタフェースも実装することをお薦めします。追加の言語固有の変換では、これらの変換に優先順位を付ける方法がないと、オーバーロードされたJavaメソッドにリンクしようとするときに、BeansLinkerが正しいオーバーロードを選択する際のあいまいさが増します。
    • メソッドの詳細

      • convertToType

        GuardedInvocation convertToType​(Class<?> sourceType,
                                        Class<?> targetType,
                                        Supplier<MethodHandles.Lookup> lookupSupplier)
                                 throws Exception
        指定されたソース・タイプの値を受け取り、指定されたターゲット・タイプに変換された値を返すガード付き型変換を返します。 値型は、プリミティブ型またはインタフェースを含む参照型のいずれかであるため、言語のオブジェクトをJavaインタフェースおよびクラスに変換するためのコンバータを提供することもできます。

        呼出しのタイプは(sourceType)→targetTypeですが、ガードのタイプは(sourceType)→booleanです。 ソース・タイプがランタイムおよびランタイムのみに固有である場合、無条件呼出しを(ガードなしで)返すことができます。

        このメソッドは、MethodHandle.asType(MethodType)によって自動的に適用できるため、method invocation conversionsに対して呼び出されることはありません。 実装では、これらの変換用のコンバータを生成するように要求されないと想定できます。 言語ランタイムでメソッド呼出し変換をカスタマイズする必要がある場合は、かわりにset an autoconversion strategy in the dynamic linker factoryにする必要があります。

        Dynalinkは、返されたコンバータの一部をキャッシュするか、同じ変換を作成するようにコンバータ・ファクトリを繰り返し要求する自由です。

        パラメータ:
        sourceType - ソース・タイプ
        targetType - ターゲット・タイプ。
        lookupSupplier - タイプ・コンバータがリクエストされたクラスの参照を取得するためのサプライヤ。 コンバータがinvokedynamic命令のリンクの一部としてリクエストされると、サプライヤはブートストラップ・メソッドに渡されたルックアップを返します。それ以外の場合、メソッドがLinkerServices.getWithLookup(Supplier, jdk.dynalink.SecureLookupSupplier)内から呼び出されると、セキュア・ルックアップ・サプライヤに委任されます。 それ以外の場合は、パブリック参照が返されます。 ルックアップが必要な一般的なケースは、コンバータがJavaアダプタ・クラスをすぐに作成する場合(たとえば、一部のオブジェクトを動的言語からJavaインタフェースに変換して相互運用性を実現する場合)です。 渡されたサプライヤでSupplier.get()メソッドを起動すると、SecureLookupSupplier.getLookup()と同じセキュリティ・チェックの対象となります。 実装では、AccessController.doPrivilegedコールの費用がかからないように、ルックアップが必要ない場合は、ルックアップの取得を回避する必要があります。
        戻り値:
        オブジェクト(ガードを渡す場合)を取得し、その表現がターゲット・タイプに強制される別のオブジェクトを返すことができるガード付き呼出し。 ファクトリが変換を処理できないことが確実な場合は、nullを返すことができます。 ファクトリは、変換を常に処理できることが確実な場合、無条件の呼出し(ガードがnullのもの)を返すことができます。
        例外:
        Exception - コンバータの作成中にエラーが発生した場合
        関連項目:
        LinkerServices.getWithLookup(Supplier, SecureLookupSupplier)