scala反射获得类别的enumaration值

时间:2017-06-06 13:03:21

标签: scala reflection enumeration classname

假设我们有

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

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

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

如何获得Class [_]" class UserRole"什么时候

u.role.getClass

返回" scala.Enumeration.Value"

1 个答案:

答案 0 :(得分:2)

new User("root", UserRole.Admin)role: UserRole.Value都没有意义,因为UserRole不是值。通常,Enumeration会延长object s,而非class es。

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

应该有效(至少对于当前版本; outerEnum不是API的一部分!)