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

インタフェースGuardingDynamicLinker

  • 既知のすべてのサブインタフェース:
    TypeBasedGuardingDynamicLinker
    既知のすべての実装クラス:
    BeansLinker, CompositeGuardingDynamicLinker, CompositeTypeBasedGuardingDynamicLinker

    public interface GuardingDynamicLinker
    言語固有の動的リンカーのベースインタフェース。 このようなリンカーは、必ずガード付きのメソッドハンドルを生成する必要があります。これは、コールサイトでの呼び出しに対するメソッドハンドルの妥当性は、必然的に何らかの条件に依存するためです(少なくとも、それはリンカーの言語ランタイムに属する受信者に依存します)。 言語ランタイム・インプリメンタは、通常、独自の言語のリンク・ロジックを1つ以上のGuardingDynamicLinkerクラスとして実装します。 これらは通常、自身用に構成するDynamicLinkerFactoryprioritized linkersとして設定し、言語固有の「見つからないプロパティ」などの条件を処理するためにfallback linkersとして設定することもできます。

    オブジェクトの Javaクラスに基づくリンカーに対して、このインタフェースではなく TypeBasedGuardingDynamicLinkerインタフェースを実装することを検討してください。 言語固有の型変換を実装する必要がある場合は、GuardingDynamicLinkerGuardingTypeConverterFactoryインタフェースも実装するようにします。

    言語は、GuardingDynamicLinkerExporterを使用して、automatic discoveryの他の言語ランタイムにリンカーをエクスポートできます。

    • メソッドの詳細

      • getGuardedInvocation

        GuardedInvocation getGuardedInvocation​(LinkRequest linkRequest,
                                               LinkerServices linkerServices)
                                        throws Exception
        コール・サイトで指定した引数を使用して、特定の呼出しに適したガード付き呼出しを作成します。
        パラメータ:
        linkRequest - 特定の呼出しをリンクするリクエストを記述するオブジェクト
        linkerServices - リンカーサービス
        戻り値:
        引数に適したメソッド・ハンドルを使用したガード付き呼出し、および失敗した場合に再リンクをトリガーするガード条件。 呼出しを解決できない場合は、nullを返す必要があります。 戻された呼出しが無条件(実際には非常にまれ)の場合、戻り値のガードはnullにできます。 呼出しには、リンケージの非同期無効化のための任意の数のスイッチ・ポイントと、再リンクをトリガーする予期される例外条件を記述するThrowableサブクラスを含めることもできます(多くの場合、常に評価されるinstanceofガードよりも、頻度の低いが予期されるClassCastExceptionに依存する方が高速です)。 リンカーは、リンク要求のコール・サイト・ディスクリプタ内のパラメータ・タイプと一致するパラメータ・タイプの呼出しを生成する必要がありますが、精度も大きさも失われない変換のみで実行できる場合を除き、コール・サイトで予期される戻り型と一致しないようにしてください。詳細は、LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType)を参照してください。
        例外:
        Exception - 何らかの理由で操作が失敗した場合