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

クラスNamespaceOperation

java.lang.Object
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とすることができます。

ネームスペース操作の基本操作は、それ自体をネームスペースまたは名前付き操作にすることはできませんが、StandardOperationの要素などの単純な操作の1つです。 ネームスペース操作自体は、名前付き操作のベース操作として機能します。たとえば、前述のGET:ELEMENT|PROPERTY:emptyは、次のようになります:

 Operation getElementOrPropertyEmpty = StandardOperation.GET
     .withNamespaces(
         StandardNamespace.ELEMENT,
         StandardNamespace.PROPERTY)
     .named("empty");
 

  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    NamespaceOperation(Operation baseOperation, Namespace... namespaces)
    新しいネームスペース操作を構築します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    boolean
    contains(Namespace namespace)
    このネームスペース操作に、指定したネームスペースと等しいネームスペースが含まれている場合はtrueを返します。
    static boolean
    contains(Operation op, Operation baseOperation, Namespace namespace)
    指定された操作がNamespaceOperationで、そのベース操作が指定された操作と等しく、指定されたネームスペースが含まれている場合は、trueを返します。
    boolean
    他のオブジェクトもネームスペース操作であり、そのベース操作とネームスペースが等しい場合、trueを返します。
    この名前付き操作のベース操作を返します。
    static Operation
    渡された操作がネームスペース操作の場合は、そのgetBaseOperation()を返し、それ以外の場合はその操作をそのまま返します。
    getNamespace(int i)
    このネームスペース操作のi番目のネームスペースを返します。
    int
    このネームスペース操作のネームスペースの数を返します。
    このネームスペース操作のネームスペースを返します。
    static Namespace[]
    渡された操作がネームスペース操作の場合は、そのgetNamespaces()を返し、それ以外の場合は空の配列を返します。
    int
    このネームスペース操作のハッシュ・コードを返します。
    このネームスペース操作の文字列表現を返します。

    クラスjava.lang.Objectで宣言されたメソッド

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait

    インタフェースjdk.dynalink.Operationで宣言されたメソッド

    named, withNamespace, withNamespaces
  • コンストラクタの詳細

    • 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。
      関連項目:
    • hashCode

      public int hashCode()
      このネームスペース操作のハッシュ・コードを返します。 baseOperation.hashCode() + 31 * Arrays.hashCode(namespaces)と等しくなるように定義されています。
      オーバーライド:
      hashCode、クラス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。