【问题标题】:scala reflection get class of enumaration valuescala反射获取枚举值的类
【发布时间】:2017-11-07 12:22:40
【问题描述】:

假设我们有

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”

【问题讨论】:

    标签: scala reflection enumeration classname


    【解决方案1】:

    new User("root", UserRole.Admin)role: UserRole.Value 都没有意义,因为 UserRole 不是一个值。通常,Enumerationobjects 扩展,而不是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 的一部分!)

    【讨论】:

    • 我使用的是 Scala 2.11,我需要使用 getDeclaredField("scala$Enumeration$$outerEnum") 才能使其工作。
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多