Класс 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(), если ключ не найден. Если исходный язык требует этой семантики, её легко реализовать с помощью операций над несколькими именованными пространствами имён.
Даже если сам язык не различает некоторые из пространств имён, полезно сопоставлять различные синтаксические конструкции с различными порядками пространств имён. Например, исходное выражение 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() |
Возвращает строковое представление этой операции над пространством имён. |
Методы, унаследованные от класса 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-е пространство имен в этой операции пространства имен.
- Исключения:
-
IndexOutOfBoundsException- если индекс выходит за пределы диапазона.
contains
public boolean contains(Namespace namespace)
- Параметры:
-
namespace- пространство имен, которое ищется. Не должно быть null. - Возвращает:
- true, если эта операция пространства имен содержит пространство имен, равное указанному пространству имен.
equals
public boolean equals(Object obj)
hashCode
toString
public String 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://download.java.net/java/early_access/jdk24/docs/api/jdk.dynalink/jdk/dynalink/NamespaceOperation.html