インタフェース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
の要素の動作に影響します。 1つの要素が最大1回出現しても、複数のインスタンスがClassFileBuilder
に提供される場合、最後に指定されたインスタンスがビルド構造に表示されます。 エレメントが1回だけ出現し、インスタンスが指定されていない場合は、その構造に未指定のデフォルト値エレメントを使用できます。
class
ファイル形式の制限により、特定の状況下では、APIでモデル化できる特定のメンバー要素をビルド構造で表現できません。 このような要素をビルダーに渡すと、IllegalArgumentException
が発生します。 一部のClassFile.Option
は、有効な class
ファイルを生成するために、そのような要素を変更または削除するかどうかを制御します。
-
メソッドのサマリー
修飾子と型メソッド説明default void
メンバー・エレメントを、作成する構造体に統合します。このビルダーに関連付けられた定数プール・ビルダーを返します。default B
transform
(CompoundElement<E> model, ClassFileTransform<?, E, B> transform) 変換を複合構造に適用し、結果をこのビルダーに指示します。メンバー・エレメントを、作成する構造体に統合します。
-
メソッドの詳細
-
accept
default void accept(E e) メンバー・エレメントを、作成する構造体に統合します。- 定義:
- インタフェース
Consumer<E extends ClassFileElement>
内のaccept
- APIのノート:
- このメソッドは、
Consumer
を実装するために存在します。ユーザーは、with(E)
をコール・チェーンに使用できます。 - パラメータ:
e
- member要素- スロー:
IllegalArgumentException
- メンバー要素をclass
ファイル形式で表すことができない場合
-
with
メンバー・エレメントを、作成する構造体に統合します。- パラメータ:
e
- member要素- 戻り値:
- このビルダー
- スロー:
IllegalArgumentException
- メンバー要素をclass
ファイル形式で表すことができない場合
-
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
は、classBuilder.transform
自体をコールするかわりに、新しいメソッド・ビルダーを使用してmethodBuilder.transform
をコールします。 - パラメータ:
model
- 変換する構造transform
- 適用する変換- 戻り値:
- このビルダー
- 関連項目:
-