Interface ClassFileBuilder<E extends ClassFileElement, B extends ClassFileBuilder<E, B>>
- Параметры типа:
E— тип элемента-членаB— тип самого этого построителя
- Все суперинтерфейсы:
Consumer<E>
- Все известные подинтерфейсы:
ClassBuilder, CodeBuilder, CodeBuilder.BlockCodeBuilder, FieldBuilder, MethodBuilder
public sealed interface ClassFileBuilder<E extends ClassFileElement, B extends ClassFileBuilder<E,B>> extends Consumer<E> permits ClassBuilder, FieldBuilder, MethodBuilder, CodeBuilder
CompoundElement, принимающий элементы-члены для включения в создаваемую структуру. Построители обычно передаются в качестве аргумента обработчикам Consumer, например в ClassFile.build(ClassDesc, Consumer). Обработчики должны передавать элементы построителю так же, как CompoundElement обходит элементы-члены. Основной способ передачи элементов построителю — with(E), поддерживающий цепочку вызовов. Конкретные подтипы построителей обычно определяют дополнительные методы для непосредственного добавления элементов в построитель, например ClassBuilder.withFlags(int) или CodeBuilder.aload(int).
Возможность появления элемента-члена несколько раз в составной структуре влияет на поведение элемента в ClassFileBuilderах. Если элемент может появиться не более одного раза, но в ClassFileBuilder передано несколько его экземпляров, в создаваемой структуре появится последний переданный экземпляр. Если элемент должен появиться ровно один раз, но ни один экземпляр не передан, в структуре может использоваться неопределённое значение элемента по умолчанию.
Из-за ограничений формата файлов class некоторые элементы-члены, которые можно смоделировать с помощью API, при определённых обстоятельствах не могут быть представлены в создаваемой структуре. Передача таких элементов построителю вызывает IllegalArgumentException. Некоторые ClassFile.Optionы управляют тем, следует ли изменять или отбрасывать такие элементы для создания допустимых файлов
class.
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
default void |
accept |
Включает элемент-член в создаваемую структуру. |
ConstantPoolBuilder |
constantPool() |
Возвращает построитель пула констант, связанный с этим построителем. |
default B |
transform |
Применяет преобразование к составной структуре, направляя результаты в этот построитель. |
B |
with |
Включает элемент-член в создаваемую структуру. |
Подробное описание методов
accept
default void accept(E e)
- Определено в:
-
acceptв интерфейсеConsumer<E extends ClassFileElement> - Примечание API:
- Этот метод предназначен для реализации
Consumer; для цепочки вызовов пользователи могут использоватьwith(E). - Параметры:
-
e— элемент-член - Вызывает исключение:
-
IllegalArgumentException— если элемент-член не может быть представлен в формате файловclass
with
B with(E e)
- Параметры:
-
e— элемент-член - Возвращает:
- этот построитель
- Вызывает исключение:
-
IllegalArgumentException— если элемент-член не может быть представлен в формате файловclass
constantPool
ConstantPoolBuilder constantPool()
- Возвращает:
- построитель пула констант, связанный с этим построителем
transform
default B transform(CompoundElement<E> model, ClassFileTransform<?,E,B> transform)
Преобразование получит каждый элемент составной структуры, а также этот построитель для создания структуры. Преобразование может сохранять, удалять или заменять элементы по своему усмотрению.
Построитель может выполнять несколько преобразований над разными составными структурами, включая в себя элементы-члены из разных источников.
- Примечание API:
- Многие подинтерфейсы содержат методы вроде
ClassBuilder.transformMethod(MethodModel, MethodTransform)илиMethodBuilder.transformCode(CodeModel, CodeTransform). Однако их вызов принципиально отличается от вызова этого метода: эти методы вызываютtransformдля дочерних построителей, а не для самого себя. Например,classBuilder.transformMethodвызываетmethodBuilder.transformс новым построителем метода, а не вызываетclassBuilder.transformдля самого себя. - Параметры:
-
model— структура для преобразования -
transform— применяемое преобразование - Возвращает:
- этот построитель
- См. также:
© 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/ClassFileBuilder.html