java.lang.Object
java.lang.classfile.components.ClassPrinter
public final class ClassPrinter extends Object
ClassPrinter
は、JavaプラットフォームのプレビューAPIです。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
クラス・ファイルとその要素のプリンタ。
ClassModel
PREVIEW、FieldModel
PREVIEW、MethodModel
PREVIEWまたはCodeModel
PREVIEWは、JSON、XMLまたはYAML形式の人間が読める構造化テキストに出力できます。 または、トラバース可能なノードと印刷可能なノードのツリーに、より正確にClassPrinter.MapNode
PREVIEW、ClassPrinter.ListNode
PREVIEWおよびClassPrinter.LeafNode
PREVIEWインスタンスのツリーにエクスポートできます。
印刷またはエクスポートする詳細のレベルは、ClassPrinter.Verbosity
PREVIEWオプションによって決まります。
印刷はデバッグのみを目的としています。 印刷されたテキスト・スキーマ、ツリー・コンテンツおよび構造は保証されません。 これは将来いつでも変更される可能性があります。
最も頻繁なユース・ケースは、単にクラスを出力することです。
ClassPrinter.toJson(classModel, ClassPrinter.Verbosity.TRACE_ALL, System.out::print);
ClassPrinter
PREVIEWを使用すると、単純な印刷可能ノードのツリーを横断してカスタム・プリンタをフックできます:
void customPrint(ClassModel classModel) {
print(ClassPrinter.toTree(classModel, ClassPrinter.Verbosity.TRACE_ALL));
}
void print(ClassPrinter.Node node) {
switch (node) {
case ClassPrinter.MapNode mn -> {
// print map header
mn.values().forEach(this::print);
}
case ClassPrinter.ListNode ln -> {
// print list header
ln.forEach(this::print);
}
case ClassPrinter.LeafNode n -> {
// print leaf node
}
}
}
ClassPrinter
PREVIEWのもう1つのユースケースは、自動テストの記述を簡略化することです:
@Test
void printNodesInTest(ClassModel classModel) {
var classNode = ClassPrinter.toTree(classModel, ClassPrinter.Verbosity.TRACE_ALL);
assertContains(classNode, "method name", "myFooMethod");
assertContains(classNode, "field name", "myBarField");
assertContains(classNode, "inner class", "MyInnerFooClass");
}
void assertContains(ClassPrinter.Node node, ConstantDesc key, ConstantDesc value) {
if (!node.walk().anyMatch(n -> n instanceof ClassPrinter.LeafNode ln
&& ln.name().equals(key)
&& ln.value().equals(value))) {
node.toYaml(System.out::print);
throw new AssertionError("expected %s: %s".formatted(key, value));
}
}
- 導入されたバージョン:
- 22
-
ネストされたクラスのサマリー
ネストされたクラス -
メソッドのサマリー
修飾子と型メソッド説明static void
toJson
(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) 提供されたモデルを構造化テキストとしてJSON形式で出力します。static ClassPrinter.MapNodePREVIEW
toTree
(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity) 提供されたモデルを印刷可能ノードのツリーにエクスポートします。static void
toXml
(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) 提供されたモデルを構造化テキストとしてXML形式で出力します。static void
toYaml
(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) 指定されたモデルを構造化テキストとしてYAML形式で出力します。
-
メソッドの詳細
-
toTree
public static ClassPrinter.MapNodePREVIEW toTree(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity) 提供されたモデルを印刷可能ノードのツリーにエクスポートします。- パラメータ:
model
- エクスポートするClassModel
PREVIEW、FieldModel
PREVIEW、MethodModel
PREVIEWまたはCodeModel
PREVIEWverbosity
- エクスポートする詳細のレベル- 戻り値:
- エクスポートされたツリーのルート・ノード
-
toJson
public static void toJson(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) 提供されたモデルを構造化テキストとしてJSON形式で出力します。- パラメータ:
model
- 出力するClassModel
PREVIEW、FieldModel
PREVIEW、MethodModel
PREVIEWまたはCodeModel
PREVIEWverbosity
- 印刷する詳細のレベルout
- 印刷フラグメントのコンシューマ
-
toXml
public static void toXml(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) 提供されたモデルを構造化テキストとしてXML形式で出力します。- パラメータ:
model
- 出力するClassModel
PREVIEW、FieldModel
PREVIEW、MethodModel
PREVIEWまたはCodeModel
PREVIEWverbosity
- 印刷する詳細のレベルout
- 印刷フラグメントのコンシューマ
-
toYaml
public static void toYaml(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) 指定されたモデルを構造化テキストとしてYAML形式で出力します。- パラメータ:
model
- 出力するClassModel
PREVIEW、FieldModel
PREVIEW、MethodModel
PREVIEWまたはCodeModel
PREVIEWverbosity
- 印刷する詳細のレベルout
- 印刷フラグメントのコンシューマ
-
ClassPrinter
を使用できます。