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