如何安全地基于int值初始化枚举?

时间:2017-02-28 21:54:12

标签: scala

我希望能够安全地根据值获得枚举。

object UserType extends Enumeration {
  type UserType = Value
  val Anonymous, Member, Paid = Value
}

如果我这样做:

UserType(100)

我收到错误:

java.util.NoSuchElementException: key not found: 100
  at scala.collection.MapLike$class.default(MapLike.scala:228)
  at scala.collection.AbstractMap.default(Map.scala:59)
  at scala.collection.mutable.HashMap.apply(HashMap.scala:65)
  at scala.Enumeration.apply(Enumeration.scala:114)
  ... 32 elided

是否有类型安全的方法来执行此操作?

1 个答案:

答案 0 :(得分:0)

您可以尝试在Enum的ValueSet上使用find,然后获取一个Option。如果该值不存在,您将获得None值(使用getOrElse非常方便)。

示例:

UserType.values.find(_ == 100)

我真的建议您阅读this answer,其中解释了如何为更好的类型安全枚举建模。