Spec-Zone.ru › OpenJDK 24

Класс 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");
 
С тех пор:
9

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

Конструктор Описание
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, 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

Spec-Zone.ru

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