Spec-Zone.ru › OpenJDK 25

Класс 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.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");
С момента появления:
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()
Возвращает строковое представление этой операции с пространством имён.

Методы, объявленные в классе Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Методы, объявленные в интерфейсе 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(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, её базовая операция равна искомой базовой операции и она содержит пространство имён, равное искомому.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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://docs.oracle.com/en/java/javase/25/docs/api/jdk.dynalink/jdk/dynalink/NamespaceOperation.html

Spec-Zone.ru

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