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).
Возможность многократного появления элемента-члена в составной структуре влияет на поведение элемента в ClassFileBuilders. Если элемент может появиться не более одного раза, но в 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.