Spec-Zone.ru › OpenJDK 25

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.

Граф иерархии запечатанных классов:
Sealed class hierarchy graph for ClassFileBuilderSealed class hierarchy graph for ClassFileBuilder
С версии:
24
См. также:
  • CompoundElement
  • ClassFileTransform

Краткое описание методов

Модификатор и тип Метод Описание
default void accept(E e)
Включает элемент-член в создаваемую структуру.
ConstantPoolBuilder constantPool()
Возвращает построитель пула констант, связанный с этим построителем.
default B transform(CompoundElement<E> model, ClassFileTransform<?,E,B> transform)
Применяет преобразование к составной структуре, направляя результаты в этот построитель.
B with(E e)
Включает элемент-член в создаваемую структуру.

Методы, объявленные в интерфейсе Consumer

andThen

Подробное описание методов

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 — применяемое преобразование
Возвращает:
этот построитель
См. также:
  • ClassFileTransform

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, в том числе концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API