- 既知のすべてのサブインタフェース:
TypeBasedGuardingDynamicLinker
public interface GuardingDynamicLinker
言語固有のダイナミック・リンカーの基本インタフェース。 このようなリンカーは、コール・サイトのコールのメソッド・ハンドルの有効性が必然的にいくつかの条件(少なくともリンカーの言語ランタイムに属するレシーバに依存)に依存するため、ガード付きのメソッド・ハンドルを生成する必要があります。 言語ランタイム・インプリメンタは通常、1つ以上の
GuardingDynamicLinker
クラスとして、自分の言語用のリンク・ロジックを実装します。 彼らは通常、自分で構成するDynamicLinkerFactory
にprioritized linkers
として構成し、言語固有の"プロパティが見つかりません"などの条件を処理するためにfallback linkers
として構成します。
オブジェクトのJavaクラスに基づくリンカーに対して、このインタフェースの代わりにTypeBasedGuardingDynamicLinker
インタフェースを実装することを検討してください。 言語固有の型変換を実装する必要がある場合は、GuardingDynamicLinker
にGuardingTypeConverterFactory
インタフェースも実装させてください。
言語は、GuardingDynamicLinkerExporter
を使用して、リンカーをautomatic discovery
の他の言語ランタイムにエクスポートできます。
-
メソッドのサマリー
修飾子と型 メソッド 説明 GuardedInvocation
getGuardedInvocation(LinkRequest linkRequest, LinkerServices linkerServices)
コール・サイトで、指定された引数を持つ特定の呼び出しに適切な保護された呼び出しを作成します。
-
メソッドの詳細
-
getGuardedInvocation
GuardedInvocation getGuardedInvocation(LinkRequest linkRequest, LinkerServices linkerServices) throws Exceptionコール・サイトで、指定された引数を持つ特定の呼び出しに適切な保護された呼び出しを作成します。- パラメータ:
linkRequest
- 特定の呼び出しをリンクするリクエストを記述するオブジェクトlinkerServices
- リンカー・サービス- 戻り値:
- 引数に適したメソッド・ハンドルで保護された呼び出しと、失敗した場合に再リンクを引き起こすガード条件。 呼び出しを解決できない場合はnullを返す必要があります。 返された呼び出しが無条件の(実際にはまれです)の場合、戻り値のガードはnullになります。 呼び出しには、リンケージの非同期無効化のための任意の数の切り替えポイント、および(常に評価される
instanceof
ガードよりもまれであるが期待されるClassCastException
に依存する方が速いことがよくあります)の再リンクをトリガーする予期される例外条件を記述するThrowable
サブクラスを含めることもできます。 リンカーは、リンク・リクエストのコール・サイト記述子にあるパラメータ型と一致するパラメータ型を持つ呼び出しを生成する必要がありますが、精度を失う変換のみでコール・サイトで期待される戻り型と一致するようにしてはいけません詳細については、LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType)
を参照してください。 - 例外:
Exception
- 何らかの理由で操作が失敗した場合
-