Интерфейс 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
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static enum |
AttributeMapper.AttributeStability |
Указывает зависимость представления атрибута в файле class от данных. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
default boolean |
allowMultiple() |
Возвращает, может ли этот атрибут встречаться в одной структуре более одного раза. |
String |
name() |
Возвращает имя атрибута. |
A |
readAttribute |
Создаёт экземпляр Attribute из файла class для Class-File API. |
AttributeMapper.AttributeStability |
stability() |
Возвращает зависимость этого атрибута от данных в файле class. |
void |
writeAttribute |
Записывает экземпляр 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
© 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