2017-06-06 6 views
0

Supposons que nous avonsréflexion scala se classe de valeur enumaration

class User(val name: String, val role: UserRole.Value) 

class UserRole extends Enumeration { 
    val Admin, User = Value 
} 

val u = new User("root", UserRole.Admin) 

comment obtenir classe [_] "classe UserRole" quand

u.role.getClass 

retour "scala.Enumeration.Value"

Répondre

1

Ni le new User("root", UserRole.Admin) ni le role: UserRole.Value n'ont de sens, car UserRole n'est pas une valeur. Normalement, Enumeration est prolongé par object s, pas class es.

Quelque chose comme

val field = classOf[Enumeration#Value].getDeclaredField("outerEnum") 
field.setAccessible(true) 
val enum = field.get(u.role) 
enum.getClass // if you want specifically the class 

devrait fonctionner (au moins pour les versions actuelles;! outerEnum ne fait pas partie de l'API)