Dans les commentaires, on m'a dit qu'il existe une bibliothèque appelée PPrint qui formate la classe de cas afin qu'elle soit facile à voir. http://www.lihaoyi.com/PPrint/
Ce qui suit est la méthode utilisant commons-lang3, mais comme la bibliothèque ci-dessus est facile à utiliser, je pense que vous devriez utiliser PPrint sauf dans des circonstances particulières.
Je voulais formater le contenu de la classe de cas Scala et l'afficher. Même si je cherchais une méthode telle que "case class pretty print" ou "scala formatting output", il n'y avait pas de hit, donc je partagerai la méthode de formatage.
Parce que la classe de cas Scala est compilée dans une classe équivalente Java Bean Format à l'aide de ToStringBuilder inclus dans commons-lang3 de Java.
commons-lang3: https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
Les valeurs de classe de cas suivantes sont formatées et affichées.
code
case class Outer(title: String, note: Seq[Inner])
case class Inner(no: Int, memo: String)
val obj = Outer("Titre", Inner(1, "Iroha") :: Inner(2, "Nihohe") :: Inner(3, "poussière") :: Nil)
println(obj)
console
Outer(Titre,List(Inner(1,Iroha), Inner(2,Nihohe), Inner(3,poussière)))
Vous pouvez mettre en forme la valeur d'un objet de format bean à l'aide de RefletToString de ToStringBuilder.
code
val text1 = ToStringBuilder.reflectionToString(obj, ToStringStyle.MULTI_LINE_STYLE)
println(text1)
console
Outer@1df5f8ae[
title=Titre
note=List(Inner(1,Iroha), Inner(2,Nihohe), Inner(3,poussière))
]
En plus des formats ci-dessus, ToStringStyle affiche également uniquement la valeur et la met en forme au format JSON.
ToStringStyle: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/builder/ToStringStyle.html
En utilisant MultilineRecursiveToStringStyle, il est possible de formater de manière récursive le contenu des champs de type case class.
code
val text2 = ToStringBuilder.reflectionToString(obj, new MultilineRecursiveToStringStyle())
println(text2)
console
Outer@7c49cd0c[
title=Titre,
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=poussière
],
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("Titre", Inner(1, "Iroha") :: Inner(2, "Nihohe") :: Inner(3, "poussière") :: 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)