2009-11-07 9 views
2

Je suis en écriture scala un sérialiseur qui enregistre un objet (ou un modèle) dans la base de données (pour le moteur de l'application), et j'ai besoin de traiter certains champs comme des cas spéciaux. Par exemple, si le champ est de type Array [Byte], je l'enregistre en tant que blob. Et j'ai besoin de traiter les Énumérations comme des cas spéciaux aussi, mais je ne peux pas savoir comment savoir si un type est une énumération.Scala: Comment savoir si une classe est une énumération; isInstanceOf [Enumeration] ne fonctionne pas

Par exemple:

object UserType extends Enumeration { 
    val Anonym, Registered, Admin, Super = Value 
} 

var value = UserType.Admin 
value.isInstanceOf[Enumeration] // this returns false 

Ni je peux faire value.isInstanceOf[Enumeration.Value] puisque la valeur est privée ... de toute façon je pense que ce serait faux revenir aussi.

Une idée?
Merci!

Répondre

6
value.isInstanceOf[Enumeration$Value] 
4

Vous pouvez vérifier cela à l'aide de ces méthodes:

scala> value.getClass    
res102: java.lang.Class[_] = class scala.Enumeration$Val 

scala> value.getClass.getSuperclass 
res103: java.lang.Class[_ >: ?0] = class scala.Enumeration$Value 

scala> value.getClass.getSuperclass.getSuperclass 
res104: java.lang.Class[_ >: ?0] = class java.lang.Object 
Questions connexes