有这样一个类:
case class Sex(name: String, number: Int)
object Sex {
val FEMALE = new Sex("FEMALE", 1)
val MALE = new Sex("MALE", 2)
def apply(number: Int): Sex = number match {
case FEMALE.number => FEMALE
case MALE.number => MALE
}
}
我很担心这个方法apply
,如何修改它才不会写出相同类型的结构?
对于这种情况和类似情况,有枚举库
下面是使用 enumeratum 的代码:
与内置相比的主要优点
Enumeration
是:trait\class
包含方法、值、内部类型等。Enum
)或其他键(for )ValueEnum
ValueEnum
在编译时检查键的唯一性。例如,在上面的代码中,如果将定义行更改Male
为编译器会抱怨非唯一值
NuSuchElementException
,而enumeratum.Enum
定义方法的withNameOption
开销要低得多。我认为,在那些用一种语言方式解决问题不自然的情况下,应该使用另一种方式。例如,一个枚举: