Scala 2.13.x中如何获取值为String类型的Enumeration的所有枚举值
你当前的UserType定义不符合Scala原生Enumeration的使用规范:你直接为member、admin赋值了字符串常量,没有调用Enumeration提供的Value()方法,因此values内置集合不会收录这两个自定义成员,自然无法通过values拿到你需要的字符串集合。
这里提供两种可落地的实现方案:
方案1:调整为标准Enumeration写法
按照Scala Enumeration的规范定义,给每个枚举项传入对应的字符串标识,使用时调用toString转换为字符串即可:
// 调整后的枚举定义 object UserType extends Enumeration { type UserType = Value val member = Value("member") val admin = Value("admin") } // 获取字符串集合 val userTypes: Set[String] = UserType.values.map(_.toString).toSet
方案2:直接用普通Object定义(无需继承Enumeration)
如果你不需要Enumeration的内置能力,只是想维护固定的字符串常量集合,直接用普通Object实现更简单,无需额外做类型转换:
object UserType { val member = "member" val admin = "admin" // 手动维护所有枚举值的集合,新增项同步更新即可 val values: Set[String] = Set(member, admin) } // 直接调用即可拿到目标集合 val userTypes: Set[String] = UserType.values
如果你完全不想修改现有
UserType的定义,可以通过反射扫描该Object下的公共String类型成员来收集值,但是该方式性能差、编译期无法检查成员遗漏,不建议生产环境使用。
内容的提问来源于stack exchange,提问作者Blankman
相关产品推荐
相关产品推荐

