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

クラスNamespaceOperation

  • すべての実装されたインタフェース:
    Operation

    public final class NamespaceOperation
    extends Object
    implements Operation
    少なくとも1つのオブジェクトのNamespaceで動作する操作を記述します。 たとえば、プロパティ・ゲッターは次のように記述されます。
     Operation propertyGetter = new NamespaceOperation(
         StandardOperation.GET,
         StandardNamespace.PROPERTY);
     
    それらはしばしばNamedOperationと組み合わされます。たとえば、"color"というプロパティのプロパティ・ゲッターを表現するには、次のようにします:
     Operation colorPropertyGetter = new NamedOperation(
         new NamespaceOperation(
             StandardOperation.GET,
             StandardNamespace.PROPERTY),
         "color");
     

    NamespaceOperationは直接構築することができますが、代わりにOperation.withNamespace(Namespace)Operation.withNamespaces(Namespace...)ファクトリ・メソッドを使用すると便利です:

     Operation getElementOrPropertyEmpty =
         StandardOperation.GET
             .withNamespace(StandardNamespace.PROPERTY)
             .named("color");
     

    複数のネームスペースに対する操作

    複数のネームスペースが指定されている場合、ネームスペースは、優先順に互いの代替として扱われます。 そのような操作のセマンティクスは"最初に適用可能"です。 つまり、GET:PROPERTY|ELEMENT:colorのコンポジットは「オブジェクト上に"color"という名前のプロパティを取得します。ただし、プロパティが存在しない場合は、代わりに"color"という名前のコレクション要素を取得してください」と解釈されます。

    複数のネームスペースを持つ操作は、1つ以上のネームスペースを区別しない言語の実装や、JavaのMapオブジェクトなどの通常のオブジェクトとコレクションの両方と見なせるオブジェクトに対する操作を表現する際に役立ちます。 Javaマップに対するGET:PROPERTY|ELEMENT:empty操作は常にMap.isEmpty()プロパティと一致しますが、GET:ELEMENT|PROPERTY:emptyはマップにそのキーが含まれている場合はマップ要素とキー"empty"を実際に一致させ、マップにキーが含まれていない場合はisEmpty()プロパティ・ゲッターに戻ります。 ソース言語がこのセマンティクスを要求する場合、複数のネームスペースでの操作を使用して簡単に達成できます。

    言語自体がいくつかのネームスペースを区別しなくても、異なる構文を異なるネームスペースの順序にマップすると便利です。 例えば、ソース表現obj.colorGET:PROPERTY | ELEMENT | METHOD:colorにマップできますが、要素セマンティクスを優先するために、コレクション要素アクセスobj[key]のように見える別のソース式を代わりにGET:ELEMENT | PROPERTY | METHODとして表すことができます。 最後に、検索された値が続いて呼び出された場合、METHODをネームスペース・リストの先頭に持っていくことが理にかなっています: ソース式のobj.color()のゲッター部分はGET:METHOD | PROPERTY | ELEMENT:colorとすることができ、obj[key]()のゲッター部分はGET:METHOD | ELEMENT | PROPERTYとすることができます。

    ネームスペース操作の基本操作は、ネームスペースまたは名前付き操作ではありませんが、単純な操作の1つはStandardOperationの要素です。 ネームスペース操作自体は、名前付き操作の基本操作として機能することができます。例えばGET:ELEMENT|PROPERTY:emptyを上から構築する典型的な方法は次のようになります:

     Operation getElementOrPropertyEmpty = StandardOperation.GET
         .withNamespaces(
             StandardNamespace.ELEMENT,
             StandardNamespace.PROPERTY)
         .named("empty");
     
    • コンストラクタの詳細

      • NamespaceOperation

        public NamespaceOperation​(Operation baseOperation,
                                  Namespace... namespaces)
        新しいネームスペース操作を構築します。
        パラメータ:
        baseOperation - 1つ以上のネームスペースで動作する基本操作。
        namespaces - この操作が動作する1つ以上のネームスペース。
        例外:
        IllegalArgumentException - 1つよりも少ないネームスペースが指定されている場合、または基本操作自体がNamespaceOperationまたはNamedOperationです。
        NullPointerException - namespaces配列またはその要素のいずれかがnullである場合、またはbaseOperationnullである場合。
    • メソッドの詳細

      • getBaseOperation

        public Operation getBaseOperation()
        この名前付き操作の基本操作を返します。
        戻り値:
        この名前付き操作の基本操作。
      • getNamespaces

        public Namespace[] getNamespaces()
        このネームスペース操作のネームスペースを返します。 返される配列はコピーであり、このオブジェクトへの変更はこのオブジェクトには影響しません。
        戻り値:
        このネームスペース操作のネームスペース。
      • getNamespaceCount

        public int getNamespaceCount()
        このネームスペース操作のネームスペースの数を返します。
        戻り値:
        このネームスペース操作におけるネームスペースの数。
      • getNamespace

        public Namespace getNamespace​(int i)
        このネームスペース操作のi番目のネームスペースを返します。
        パラメータ:
        i - ネームスペース・インデックス
        戻り値:
        このネームスペース操作のi番目のネームスペース。
        例外:
        IndexOutOfBoundsException - インデックスが範囲外の場合。
      • contains

        public boolean contains​(Namespace namespace)
        このネームスペース操作に指定されたネームスペースと等しいネームスペースが含まれている場合はtrueを返します。
        パラメータ:
        namespace - ネームスペースが検索されます。 nullは不可。
        戻り値:
        このネームスペース操作の場合、指定されたネームスペースと等しいネームスペースが含まれている場合はtrue。
      • equals

        public boolean equals​(Object obj)
        他のオブジェクトがネームスペース操作であり、その基本操作とネームスペースが等しい場合はtrueを返します。
        オーバーライド:
        equals 、クラス:  Object
        パラメータ:
        obj - 比較対象のオブジェクト
        戻り値:
        このオブジェクトが他のオブジェクトと等しい場合はtrue、そうでない場合はfalse。
        関連項目:
        Object.hashCode()HashMap
      • hashCode

        public int hashCode()
        このネームスペース操作のハッシュ・コードを返します。 baseOperation.hashCode() + 31 * Arrays.hashCode(namespaces)と等しくなるように定義されています。
        オーバーライド:
        hashCode 、クラス:  Object
        戻り値:
        このオブジェクトのハッシュ・コード値。
        関連項目:
        Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)
      • toString

        public String toString()
        このネームスペース操作の文字列表現を返します。 その基本操作のtoStringに続いてコロン文字が続き、そのネームスペースのリストが垂直線(e.g. "GET:PROPERTY|ELEMENT")で区切られていると定義されています。
        オーバーライド:
        toString 、クラス:  Object
        戻り値:
        このネームスペース操作の文字列表現。
      • getBaseOperation

        public static Operation getBaseOperation​(Operation op)
        渡された操作がネームスペース操作の場合はgetBaseOperation()を返し、そうでない場合はその操作をそのまま返します。
        パラメータ:
        op - 操作
        戻り値:
        渡された操作の基本操作。
      • getNamespaces

        public static Namespace[] getNamespaces​(Operation op)
        渡された操作がネームスペース操作の場合はgetNamespaces()を返し、そうでない場合は空の配列を返します。
        パラメータ:
        op - 操作
        戻り値:
        渡された操作のネームスペース。
      • contains

        public static boolean contains​(Operation op,
                                       Operation baseOperation,
                                       Namespace namespace)
        指定された操作がNamespaceOperationで、その基底操作が指定された操作と等しく、指定されたネームスペースを含む場合はtrueを返します。 NamespaceOperationでない場合、falseを返します。
        パラメータ:
        op - 操作。 nullは不可。
        baseOperation - 基本操作が検索されます。 nullは不可。
        namespace - ネームスペースが検索されます。 nullは不可。
        戻り値:
        渡された操作がNamespaceOperationで、その基本操作が検索された基本操作と等しく、検索されたネームスペースと等しいネームスペースを含む場合はtrue。