In den Kommentaren wurde mir gesagt, dass es eine Bibliothek namens PPrint gibt, die die Fallklasse so formatiert, dass sie leicht zu sehen ist. http://www.lihaoyi.com/PPrint/
Das Folgende ist die Methode mit commons-lang3, aber da die obige Bibliothek einfach zu verwenden ist, sollten Sie PPrint verwenden, es sei denn, es liegen besondere Umstände vor.
Ich wollte den Inhalt der Scala-Fallklasse formatieren und anzeigen. Ich werde die Formatierungsmethode freigeben, da es keinen Treffer gab, selbst wenn ich nach der Methode mit "Fallklasse Pretty Print" oder "Scala-Formatierungsausgabe" gesucht habe.
Weil die Scala-Fallklasse in eine Java Bean-äquivalente Klasse kompiliert wird Formatieren mit ToStringBuilder in Java commons-lang3.
commons-lang3: https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
Die folgenden Werte für Fallklassen werden formatiert und angezeigt.
code
case class Outer(title: String, note: Seq[Inner])
case class Inner(no: Int, memo: String)
val obj = Outer("Titel", Inner(1, "Iroha") :: Inner(2, "Nihohe") :: Inner(3, "Staub") :: Nil)
println(obj)
console
Outer(Titel,List(Inner(1,Iroha), Inner(2,Nihohe), Inner(3,Staub)))
Sie können den Wert eines Bean-Format-Objekts mithilfe von ReflectionToString von ToStringBuilder formatieren.
code
val text1 = ToStringBuilder.reflectionToString(obj, ToStringStyle.MULTI_LINE_STYLE)
println(text1)
console
Outer@1df5f8ae[
title=Titel
note=List(Inner(1,Iroha), Inner(2,Nihohe), Inner(3,Staub))
]
Zusätzlich zu den oben genannten Formaten zeigt ToStringStyle nur den Wert an und formatiert ihn in das JSON-Format.
ToStringStyle: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/builder/ToStringStyle.html
Mit MultilineRecursiveToStringStyle ist es möglich, den Inhalt von Feldern vom Typ case class rekursiv zu formatieren.
code
val text2 = ToStringBuilder.reflectionToString(obj, new MultilineRecursiveToStringStyle())
println(text2)
console
Outer@7c49cd0c[
title=Titel,
note=scala.collection.immutable.$colon$colon@772294c7[
head=Inner@8acd465[
no=1,
memo=Iroha
],
tl=scala.collection.immutable.$colon$colon@7d64ef3e[
head=Inner@1e03c8f9[
no=2,
memo=Nihohe
],
tl=scala.collection.immutable.$colon$colon@10f69849[
head=Inner@7e9769ce[
no=3,
memo=Staub
],
tl=scala.collection.immutable.Nil$@24d0643d[
]
]
]
]
]
PrettyPrintApp.scala
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.apache.commons.lang3.builder.MultilineRecursiveToStringStyle;
object PrettyPrintApp extends App {
val obj = Outer("Titel", Inner(1, "Iroha") :: Inner(2, "Nihohe") :: Inner(3, "Staub") :: Nil)
println("--------------------------------------------------------------------------------")
println("obj: ")
println(obj)
println("--------------------------------------------------------------------------------")
println("ToStringStyle.MULTI_LINE_STYLE: ")
val text1 = ToStringBuilder.reflectionToString(obj, ToStringStyle.MULTI_LINE_STYLE)
println(text1)
println("--------------------------------------------------------------------------------")
println("MultilineRecursiveToStringStyle: ")
val text2 = ToStringBuilder.reflectionToString(obj, new MultilineRecursiveToStringStyle())
println(text2)
println("--------------------------------------------------------------------------------")
}
case class Outer(title: String, note: Seq[Inner])
case class Inner(no: Int, memo: String)