scala 反射获取枚举值 class

scala reflection get class of enumaration value

假设我们有

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

return "scala.Enumeration.Value"

new User("root", UserRole.Admin)role: UserRole.Value 都没有意义,因为 UserRole 不是一个值。通常,Enumeration 会扩展 objects,而不是 classes。

类似于

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 的一部分!)