Интерфейс ClassFileBuilder<E extends ClassFileElement, B extends ClassFileBuilder<E, B>>
- Type Parameters:
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(java.lang.classfile.MethodModel, java.lang.classfile.MethodTransform)илиMethodBuilder.transformCode(java.lang.classfile.CodeModel, java.lang.classfile.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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/classfile/ClassFileBuilder.html