Класс 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.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");
- С момента появления:
- 9
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
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() |
Возвращает строковое представление этой операции с пространством имён. |
Методы, объявленные в интерфейсе 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-е пространство имён этой операции с пространством имён.
- Выбрасывает:
-
IndexOutOfBoundsException— если индекс находится вне допустимого диапазона.
contains
public boolean contains(Namespace namespace)
- Параметры:
-
namespace— искомое пространство имён. Не должно быть null. - Возвращает:
- true, если эта операция с пространством имён содержит пространство имён, равное указанному.
equals
public boolean equals(Object obj)
hashCode
toString
public String toString()
toString базовой операции, за которым следует двоеточие, а затем список пространств имён, разделённых вертикальной чертой (например, "GET:PROPERTY|ELEMENT").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, 2025, 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/25/docs/api/jdk.dynalink/jdk/dynalink/NamespaceOperation.html