Spec-Zone.ru › OpenJDK 25

Интерфейс 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. Для чтения этих атрибутов пользовательские AttributeMappers необходимо зарегистрировать в 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 для Class-File API.
AttributeMapper.AttributeStability stability()
Возвращает зависимость этого атрибута от данных в файле class.
void writeAttribute(BufWriter buf, A attr)
Записывает экземпляр Attribute в файл class для Class-File API.

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

name

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

readAttribute

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

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

При вызове этого метода Class-File 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 для Class-File API.

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

При вызове этого метода Class-File 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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по 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/java.base/java/lang/classfile/AttributeMapper.html

Spec-Zone.ru

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