Класс 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 фактически будет соответствовать элементу map с ключом "empty", если map содержит этот ключ, и только затем обратится к оператору получения свойства isEmpty() если map не содержит ключ. Если исходный язык требует такой семантики, её можно легко реализовать с помощью операций над несколькими пространствами имён.
Даже если сам язык не различает некоторые пространства имён, может быть полезно сопоставлять различные синтаксисы с различными порядками пространств имён. Например, исходное выражение 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 |
Создаёт новую операцию пространства имён. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
contains |
Возвращает true, если эта операция пространства имён содержит пространство имён, равное указанному пространству имён. |
static boolean |
contains |
Возвращает true, если указанная операция является NamespaceOperation и её базовая операция равна указанной операции, а она содержит указанное пространство имён. |
boolean |
equals |
Возвращает true, если другой объект также является операцией пространства имён и их базовая операция и пространства имён равны. |
Operation |
getBaseOperation() |
Возвращает базовую операцию этой именованной операции. |
static Operation |
getBaseOperation |
Если переданная операция является операцией пространства имён, возвращает её getBaseOperation(), в противном случае возвращает операцию как есть. |
Namespace |
getNamespace |
Возвращает i-е пространство имён в этой операции пространства имён. |
int |
getNamespaceCount() |
Возвращает количество пространств имён в этой операции пространства имён. |
Namespace[] |
getNamespaces() |
Возвращает пространства имён в этой операции пространства имён. |
static Namespace[] |
getNamespaces |
Если переданная операция является операцией пространства имён, возвращает её 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, или еслиbaseOperationnull.
Подробное описание методов
getBaseOperation
public Operation getBaseOperation()
- Возвращает:
- базовую операцию данной операции с пространством имён.
getNamespaces
public Namespace[] getNamespaces()
- Возвращает:
- пространства имён в этой операции с пространством имён.
getNamespaceCount
public int getNamespaceCount()
- Возвращает:
- количество пространств имён в этой операции с пространством имён.
getNamespace
public Namespace getNamespace(int i)
- Параметры:
-
i- индекс пространства имён - Возвращает:
- i-е пространство имён в этой операции с пространством имён.
- Исключения:
-
IndexOutOfBoundsException- если индекс выходит за пределы диапазона.
contains
public boolean contains(Namespace namespace)
- Параметры:
-
namespace- искомое пространство имён. Не должно быть null. - Возвращает:
- true, если данная операция с пространством имён содержит пространство имён, равное указанному пространству имён.
equals
public boolean equals(Object obj)
- Переопределяет:
-
equalsв классеObject - Параметры:
-
obj- объект для сравнения - Возвращает:
- true, если этот объект равен другому, в противном случае false.
- См. также:
hashCode
public int hashCode()
baseOperation.hashCode() + 31 * Arrays.hashCode(namespaces).- Переопределяет:
-
hashCodeв классе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)
NamespaceOperation, её базовая операция равна указанной операции, и она содержит указанное пространство имён. Если это не NamespaceOperation, то возвращает false.- Параметры:
-
op- операция. Не должно быть null. -
baseOperation- базовая операция, которая ищется. Не должно быть null. -
namespace- пространство имён, которое ищется. Не должно быть null. - Возвращает:
- true, если переданная операция является
NamespaceOperation, её базовая операция равна искомой базовой операции, и она содержит пространство имён, равное искомому пространству имён.
© 1993, 2023, 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/21/docs/api/jdk.dynalink/jdk/dynalink/NamespaceOperation.html