Spec-Zone.ru › OpenJDK 24

Интерфейс AttributeMapper<A extends Attribute<A>>

Параметры типа:
A - тип атрибута
public interface AttributeMapper<A extends Attribute<A>>
Двунаправленный маппер между представлением атрибута в файле class и его моделью API. Маппер атрибутов идентифицирует атрибут по его имени и используется для парсинга представления атрибута в файле class в модель и для записи представления модели обратно в файл class.

Attributes определяет мапперы для предопределённых атрибутов в JVMS и некоторых стандартных атрибутов. Для других атрибутов (JVMS 4.7.1) пользователи могут определить свои собственные AttributeMapper; классы, которые моделируют эти атрибуты, должны расширять CustomAttribute. Для чтения этих атрибутов пользовательские AttributeMapper должны быть зарегистрированы в ClassFile.AttributeMapperOption.

С:
24
См. также:
  • Attributes
  • ClassFile.AttributeMapperOption
  • java.lang.classfile.attribute

Краткое описание вложенных классов

Модификатор и тип Интерфейс Описание
static enum  AttributeMapper.AttributeStability
Указывает зависимость данных представления атрибута в файле class.

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

Модификатор и тип Метод Описание
default boolean allowMultiple()
Возвращает, может ли этот атрибут появляться более одного раза в одной структуре.
String name()
Возвращает имя атрибута.
A readAttribute(AttributedElement enclosing, ClassReader cf, int pos)
Создаёт экземпляр Attribute из файла class для API файлов классов.
AttributeMapper.AttributeStability stability()
Возвращает зависимость данных этого атрибута от файла class.
void writeAttribute(BufWriter buf, A attr)
Записывает экземпляр Attribute в файл class для API файлов классов.

Подробное описание методов

name

String name()
Возвращает имя атрибута.
Возвращает:
имя атрибута

readAttribute

A readAttribute(AttributedElement enclosing, ClassReader cf, int pos)
Создаёт экземпляр Attribute из файла class для API файлов классов.

Этот метод вызывается API файлов классов для поддержки чтения атрибутов. Пользователи не должны вызывать этот метод.

API файлов классов даёт такие гарантии относительно вызова этого метода:

  • Utf8Entry для имени атрибута доступен с помощью cf.readEntry(pos - 6, Utf8Entry.class) и валидируется;
  • Длина атрибута доступна с помощью cf.readInt(pos - 4) и валидируется, чтобы быть положительной и не превышать длину файла class;
  • AttributedElement функции доступа к атрибутам в модели enclosing недоступны при вызове этого метода, но могут быть доступны позже возвращённым атрибутом, когда он доступен пользователям.

Возвращённый Attribute должен удовлетворять этим требованиям:

  • Attribute.attributeMapper() возвращает этот маппер;
  • Attribute.attributeName() возвращает имя атрибута в файле class.
Замечание API:
Реализации этого метода должны выполнять минимальную работу для возврата атрибута, так как этот метод вызывается даже если возвращённый атрибут никогда не используется. В частности, реализация должна избегать проверки валидности данных атрибута в файле class или выполнения действий, которые могут вызвать исключения.
Параметры:
enclosing - структура, в которой появляется этот атрибут
cf - предоставляет доступ к файлу class для чтения
pos - смещение в файле class, в котором начинаются данные атрибута
Возвращает:
прочитанный атрибут

writeAttribute

void writeAttribute(BufWriter buf, A attr)
Записывает экземпляр Attribute в файл class для API файлов классов.

Этот метод вызывается API файлов классов для поддержки записи атрибутов. Пользователи не должны вызывать этот метод.

API файлов классов даёт такие гарантии относительно вызова этого метода:

  • attr.attributeMapper() возвращает этот маппер;
  • Файл buf может уже содержать данные, и его size может не быть 0.

Запись в файл class должна удовлетворять этим требованиям:

  • Имя атрибута u2 и длина атрибута u4 должны быть записаны в файл buf;
  • attr.attributeName() записывается как с помощью buf.writeIndex(attr.attributeName());
  • Длина атрибута — это длина, в байтах, содержимого атрибута, записанного в файл buf, не включая 6 байт, используемых для имени и длины;
  • Если какая-либо информация в модели API атрибута, attr, не может быть представлена в формате файла class атрибута, выбрасывается IllegalArgumentException.
Замечание API:
BufWriter.patchInt(int, int, int) может использоваться для обновления длины атрибута после записи содержимого атрибута в файл buf.
Параметры:
buf - BufWriter для записи атрибута
attr - атрибут для записи
Исключение:
IllegalArgumentException - если какие-либо данные в модели API атрибута недействительны для формата файла class

allowMultiple

default boolean allowMultiple()
Возвращает, может ли этот атрибут появляться более одного раза в одной структуре.

Если атрибут не допускает нескольких экземпляров в одной структуре, может быть передан в ClassFileBuilder, и если в конструктор передаются несколько экземпляров атрибута, в построенной структуре появляется последний переданный атрибут.

Требования к реализации:
По умолчанию возвращается false.
Возвращает:
можно ли этот атрибут может появиться более одного раза в одной структуре

stability

AttributeMapper.AttributeStability stability()
Возвращает зависимость данных этого атрибута от файла class.
Возвращает:
зависимость данных этого атрибута от файла class

© 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/java.base/java/lang/classfile/AttributeMapper.html

Spec-Zone.ru

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