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

クラスNamespaceOperation

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

    public final class NamespaceOperation
    extends Object
    implements Operation
    オブジェクトのNamespaceを1つ以上操作する操作を記述します。 たとえば、プロパティgetterは次のように記述されます。
     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()のgetter部分はGET:METHOD|PROPERTY|ELEMENT:colorで、obj[key]()のgetter部分はGET:METHOD|ELEMENT|PROPERTYです。

    ネームスペース操作の基本操作は、それ自体がネームスペースまたは名前付き操作ではなく、StandardOperationの要素のような単純な操作の1つです。 ネームスペース操作自体は、名前付き操作の基本操作として機能します。たとえば、前述の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
      • toString

        public String toString()
        このネームスペース操作の文字列表現を返します。 ベース操作のtoStringに続けてコロン文字を定義し、その後にそのネームスペースのリストを縦線文字で区切ります(例: "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。