Spec-Zone.ru › OpenJDK 21

Класс 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() если map не содержит ключ. Если исходный язык требует такой семантики, её можно легко реализовать с помощью операций над несколькими пространствами имён.

Даже если сам язык не различает некоторые пространства имён, может быть полезно сопоставлять различные синтаксисы с различными порядками пространств имён. Например, исходное выражение 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()
Возвращает строковое представление этой операции с пространством имён. Определено как строковое представление её базовой операции, за которым следует двоеточие и список пространств имён, разделённых вертикальной чертой (например, "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, 2023, 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/21/docs/api/jdk.dynalink/jdk/dynalink/NamespaceOperation.html

Spec-Zone.ru

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