Spec-Zone.ru › OpenJDK 17

Класс 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 фактически будет соответствовать элементу 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(Operation baseOperation, Namespace... namespaces)
Создаёт новую операцию с именованным пространством.

Краткое описание методов

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API