Класс NamespaceOperation

Все реализованные интерфейсы:
Operation
public final class NamespaceOperation
extends Object
implements Operation

Описание операции, которая работает с по крайней мере одним 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".

Операции с несколькими именованными пространствами имён полезны при реализации языков, которые не различают одно или несколько пространств имён, или когда требуется выразить операции над объектами, которые могут рассматриваться как обычные объекты и как коллекции, например, объекты Java Map. Операция GET:PROPERTY|ELEMENT:empty над объектом Java map всегда будет соответствовать свойству Map.isEmpty(), но GET:ELEMENT|PROPERTY:empty фактически будет соответствовать элементу карты с ключом "empty", если карта содержит этот ключ, и только воспользуется получением свойства isEmpty() как запасным вариантом, если ключ в карте отсутствует. Если исходный язык требует такой семантики, её легко можно достичь с помощью операций над несколькими именованными пространствами имён.

Даже если сам язык не различает некоторые из пространств имён, полезно сопоставлять различные синтаксические конструкции с различными порядками пространств имён. Например, исходное выражение obj.color может быть сопоставлено с GET: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. Однако сама операция над именованным пространством имён может служить основной операцией именованной операции; типичный способ построения, например, 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)

Возвращает true, если заданная операция является NamespaceOperation и её основная операция равна заданной операции, и она содержит указанное пространство имён.

boolean equals​(Object obj)

Возвращает true, если другой объект также является операцией над именованным пространством имён и их основные операции и пространства имён равны.

Operation getBaseOperation()

Возвращает основную операцию этой именованной операции.

static Operation getBaseOperation​(Operation op)

Если переданная операция является операцией над именованным пространством имён, возвращает её getBaseOperation(), иначе возвращает операцию как есть.

Namespace getNamespace​(int i)

Возвращает i-е пространство имён в этой операции над именованным пространством имён.

int getNamespaceCount()

Возвращает количество пространств имён в этой операции над именованным пространством имён.

Namespace[] getNamespaces()

Возвращает пространства имён в этой операции над именованным пространством имён.

static Namespace[] getNamespaces​(Operation op)

Если переданная операция является операцией над именованным пространством имён, возвращает её getNamespaces(), иначе возвращает пустой массив.

int hashCode()

Возвращает хэш-код этой операции над именованным пространством имён.

String toString()

Возвращает строковое представление этой операции над именованным пространством имён.

Методы, объявленные в классе 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 - базовая операция, которая работает с одним или несколькими пространствами имён.
namespaces - одно или несколько пространств имён, с которыми работает данная операция.
Исключения:
IllegalArgumentException - если указано менее одного пространства имён, или базовая операция сама является NamespaceOperation или NamedOperation.
NullPointerException - если массив namespaces или любой из его элементов имеет значение null, или если baseOperation имеет значение null.

Методы

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()

Возвращает строковое представление данной операции над пространствами имён. Определено как строковое представление её базовой операции, за которым следует двоеточие и список пространств имён, разделённых вертикальной чертой (например, "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)

Возвращает true, если указанная операция является NamespaceOperation и её базовая операция равна указанной операции, и она содержит указанное пространство имён. Если это не NamespaceOperation, возвращает false.

Параметры:
op - операция. Не должно быть null.
baseOperation - базовая операция, которую ищут. Не должно быть null.
namespace - пространство имён, которое ищут. Не должно быть null.
Возвращает:
true, если переданная операция является NamespaceOperation, её базовая операция равна искомой базовой операции и содержит пространство имён, равное искомому пространству имён.

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/jdk.dynalink/jdk/dynalink/NamespaceOperation.html

Spec-Zone .ru
спецификации, руководства, описания, API