[JAVA] Façonnez la classe de cas Scala pour qu'elle soit facile à voir

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.

Méthode de mise en forme

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

Objet à afficher

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)))

Formater et afficher jusqu'à la première couche de la classe en couches

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

Les classes de cas hiérarchiques sont également formatées et affichées de manière récursive

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[
          
        ]
      ]
    ]
  ]
]

Exemple de code

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)


Recommended Posts

Façonnez la classe de cas Scala pour qu'elle soit facile à voir
J'ai touché Scala ~ [Classe] ~