public interface GuardingTypeConverterFactory
言語固有の型変換機能を提供するために
GuardingDynamicLinker
実装で実装できるオプションのインタフェース。 このインタフェースを実装する場合は、ConversionComparator
インタフェースも実装することをお勧めします。これらの変換の優先順位付けの戦略がない場合、追加の言語固有の変換によって、試行時に正しいオーバーロードを選択する際のBeansLinker
のあいまいさが増しますオーバーロードされたJavaメソッドにリンクします。 -
メソッドのサマリー
修飾子と型メソッド説明convertToType(Class<?> sourceType, Class<?> targetType, Supplier<MethodHandles.Lookup> lookupSupplier)
指定されたソース型の値を受け取り、指定されたターゲット型に変換された値を返す保護された型変換を返します。
-
メソッドの詳細
-
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アダプタ・クラスをfly (例えば、動的言語のオブジェクトを相互運用性のためのJavaインタフェースに変換)に作成するときです。 渡されたサプライヤでSupplier.get()
メソッドを呼び出すと、SecureLookupSupplier.getLookup()
と同じセキュリティ・チェックが適用されます。 実装では、AccessController.doPrivileged
呼び出しの費用を避けるためにルックアップが必要ない場合は検索を行わないでください。- 戻り値:
- オブジェクト(それがガードをパスするならば)を受け取り、その表現がターゲット型に強制されている別のオブジェクトを返すことができる保護された呼び出し。 ファクトリが変換を処理できないことが確実である場合、nullを返すことができます。 ファクトリが変換を常に処理できることが確実である場合、無条件に(ガードがヌルの人)を呼び出すことができます。
- 例外:
Exception
- コンバータの作成中にエラーが発生した場合- 関連項目:
LinkerServices.getWithLookup(Supplier, SecureLookupSupplier)
-