Класс 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");
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
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()
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, 2021, 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/17/docs/api/jdk.dynalink/jdk/dynalink/NamespaceOperation.html