scala - Scala 中丰富的枚举

标签 scala enumeration

我正在寻找一种在 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/

相关文章:

Scala 2.12 使用 Java 1.8;如果无法升级到Java 1.8怎么办?

bash - 从脚本执行 SBT 命令

python - 如何枚举 Python 中的非字符串对象列表?

java - 从枚举调用函数

c - c 中的枚举?它们可以用于存储吗

scala - 为什么在非最终类中使用普通 val

scala - 为什么向量这么浅?

scala - 未应用类型参数的类型界限

swift - 如何使用枚举创建计算函数?

JAVA Hashtable 查找最大值