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

インタフェースMissingMemberHandlerFactory

  • 関数型インタフェース:
    これは関数型インタフェースなので、ラムダ式またはメソッド参照の代入先として使用できます。

    @FunctionalInterface
    public interface MissingMemberHandlerFactory
    BeansLinkerで欠落しているメンバー動作をリンクするためのメソッド・ハンドルを作成するためのファクトリ。 BeansLinkerは、これらのメソッド・ハンドルを、リクエストされたメンバー(プロパティ、メソッドまたは要素)が欠落していることが確実であるか、または可能である場合に、GET_*およびSET_* StandardOperationを指定するリンク・リクエストのガード付き呼出しにリンクします。 これらは、named操作と名前のない操作の両方でリンクされます。 実装者は、返されたメソッド・ハンドルのパラメータ・タイプが、リンク・リクエストで説明されているコール・サイトのパラメータ・タイプと一致していることを確認する必要があります。 ただし、DynamicLinkerFactory.setPrelinkTransformer(jdk.dynalink.linker.GuardedInvocationTransformer)遅延戻り型変換を許可するために、戻り型は異なる場合があります。 デフォルトの動作で十分な場合は、メソッド・ハンドルに対してnullを戻すことができます。

    デフォルトのメンバー欠落動作

    メンバー・ハンドラ・ファクトリがない状態でBeansLinkerが構成されている場合、またはファクトリが特定のハンドラ作成呼出しに対してnullを返す場合は、デフォルトの動作が使用されます。 デフォルトの動作では、リンクされた操作が既存のメンバーに対処しないことをリンク時に判断できる場合、GuardingDynamicLinker.getGuardedInvocation(LinkRequest, LinkerServices)からnullが返されます。 これにより、DynamicLinkerは次のリンカーが存在する場合、またはNoSuchDynamicMethodExceptionでリンク・リクエストを最終的に失敗した場合に試行できます。 その他の場合(通常、すべての名前のないメンバー操作およびコレクション要素に対するほとんどの名前付き操作)では、BeansLinkerは、実行時にgetterのどのメンバーとも一致しない名前で呼び出されたときにnullを返す条件付きリンケージを生成し、setterに渡された値を暗黙的に無視します。

    例外スロー動作の実装

    欠落しているメンバーに対する操作の言語固有の動作が例外をスローする場合、ファクトリは、呼出し時に例外をスローするメソッド・ハンドルを生成し、欠落しているメンバーのリンケージは条件付きであることが多いため、例外自体をスローしないようにする必要があります。
    関連項目:
    BeansLinker(MissingMemberHandlerFactory)
    • メソッドの詳細

      • createMissingMemberHandler

        MethodHandle createMissingMemberHandler​(LinkRequest linkRequest,
                                                LinkerServices linkerServices)
                                         throws Exception
        特定のリンク・リクエストの欠落しているメンバー動作の実装に適したメソッド・ハンドルを返します。 詳細については、クラスの説明を参照してください。
        パラメータ:
        linkRequest - 現在のリンク・リクエスト
        linkerServices - 現在のリンク・サービス
        戻り値:
        操作によってアドレス指定されているプロパティ、要素またはメソッドが欠落している場合に起動できるメソッド・ハンドル。 戻り値はnullの場合があります。
        例外:
        Exception - 操作がなんらかの理由で失敗した場合。 欠落しているメンバー動作の例外スローを実装するには、クラス・ドキュメントのノートを確認してください。