我正在寻找一种在 Scala 中实现丰富枚举的机制,就像在 Java 中向枚举添加抽象方法并在枚举的实例中实现它们一样。
请注意,使用密封特征和案例对象不是一个解决方案,因为我将无法迭代现有的案例对象,除非我维护它们的列表,这对于更改非常脆弱(尤其是其他更改)不明白那里发生了什么的人)
最佳答案
只需扩展Val
即可。
object items extends Enumeration {
val pen = Item("writing")
val brush = Item("painting")
final case class Item(key: String) extends Val {
def kind: String = toString
}
}
object Test {
import items._
def main(args: Array[String]) {
println(pen.kind +" is for "+ pen.key)
println(brush.key)
println(items.values)
}
}
或
object days extends Enumeration {
case class Day(i: Int, name: String) extends Val(i, name) {
def isWeekDay = i < 5
}
private def newDay() = new Day(nextId, null)
val Mon, Tue, Wed, Thu, Fri, Sat, Sun = newDay()
val daysOfTheWeek = values.toList.asInstanceOf[List[Day]]
}
object Test extends App {
import days._
println(Thu)
println(days.values.toList mkString ",")
for (d <- days.daysOfTheWeek) Console println s"$d is weekday? ${d.isWeekDay}"
}
关于scala - Scala 中丰富的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19265007/