Comment puis-je obtenir facilement un Scala cas nom de la classe?
Donné:
case class FirstCC {
def name: String = ... //something that will give "FirstCC"
}
case class SecondCC extends FirstCC
val one = FirstCC()
val two = SecondCC()
Comment puis-je obtenir "FirstCC"
de one.name
et "SecondCC"
de two.name
?
- N'est pas la méthode toString de classes de cas de leur nom (et les paramètres)?
FirstCC.toString
retourne"<function>"
- Grâce à vous, probablement dire
one.toString
... - Une meilleure solution apparaît sur cette question stackoverflow.com/questions/1166732/...
Vous devez vous connecter pour publier un commentaire.
Ou si vous voulez que le nom sans l'emballage:
Consultez la documentation de java.lang.Class pour plus d'informations.
getSimpleName
peut parfois jeterjava.lang.InternalError: Malformed class name
, par exemple lors de l'appel sur la classe d'un objet.getCanonicalName
case class `First-CC`
vous obtiendrez le simple nom de cette:First$minusCC
dont vous aurez besoin pour normaliser pour le faire correspondre le nom réel de nouveauVous pouvez utiliser la propriété
productPrefix
de la classe de cas:N. B.
Si vous passez à la scala 2.8 de l'extension d'une classe de cas ont été remplacés et vous avez de ne pas oublier la gauche et la droite parent
()
this.getClass.getName
?getSimpleName
)? Je trouve votre réponse très belle façon de surmonterjava.lang.InternalError: Malformed class name
exception dans le cas d'objets imbriquésFoo-Bar-Gong
(avec en arrière-tiques) rend comme "Foo-Bar-Gong" (comme de 2.11.6)getName
. Beaucoup mieux quetoString
.Ici est un Scala fonction qui génère une chaîne explicite à partir de n'importe quel type, recursing sur les paramètres de type:
https://gist.github.com/erikerlandson/78d8c33419055b98d701