Класс NamespaceOperation
- java.lang.Object
-
- jdk.dynalink.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, если заданная операция является |
boolean | equals(Object obj) | Возвращает true, если другой объект также является операцией над именованным пространством имён и их основные операции и пространства имён равны. |
Operation | getBaseOperation() | Возвращает основную операцию этой именованной операции. |
static Operation | getBaseOperation(Operation op) | Если переданная операция является операцией над именованным пространством имён, возвращает её |
Namespace | getNamespace(int i) | Возвращает i-е пространство имён в этой операции над именованным пространством имён. |
int | getNamespaceCount() | Возвращает количество пространств имён в этой операции над именованным пространством имён. |
Namespace[] | getNamespaces() | Возвращает пространства имён в этой операции над именованным пространством имён. |
static Namespace[] | getNamespaces(Operation op) | Если переданная операция является операцией над именованным пространством имён, возвращает её |
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