它不能用参数进行初始化,只能与自身进行比较(单例)。所以它的equals和hash代码函数没有优势。有没有人遇到过他们认为有用的案例?
答案 0 :(得分:9)
您可以使用案例对象作为枚举的替代方法。
详情请见:Case objects vs Enumerations in Scala
该问题的简化示例:
sealed trait Currency {
def name: String
def symbol: String
}
case object EUR extends Currency {
val name = "EUR"
val symbol = "€"
}
case object USD extends Currency {
val name = "USD"
val symbol = "$"
}
Enumeration
中的ID和名称相比)sealed
类型层次结构),如果匹配并非详尽无遗。所以这段代码
val ccy: Currency = EUR
ccy match {
case EUR =>
println("Euro")
}
将导致
警告:(27,7)匹配可能并非详尽无遗 它将在以下输入上失败:美元
ccy match {
Enumeration
提供withName()
)答案 1 :(得分:5)
我认为最重要的区别是案例对象可以序列化,而简单的对象则不能。
这使得它们作为使用Akka-Remote的消息非常有用。
修改强>
正如Rüdiger Klaehn所指出的,这不是我们从case
关键字获得的唯一好处。还有:
对于其他课程:
apply
和unapply
实施(此列表可能并非详尽无遗!)