Spec-Zone.ru › OpenJDK 27

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.

Граф иерархии запечатанных классов:
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
Модификатор и тип Метод Описание
default Consumer<E> andThen(Consumer<? super E> after)
Возвращает составной Consumer, который последовательно выполняет сначала эту операцию, а затем операцию after.

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

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, 2026, 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.

Spec-Zone.ru

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