它不能用参数进行初始化,只能与自身进行比较(单例).所以它的equals和hash代码函数没有优势.有没有人遇到过他们认为有用的案例?
您可以使用案例对象作为枚举的替代方法.
可以在此处找到详细信息:案例对象与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 = "$"
}
Run Code Online (Sandbox Code Playgroud)
Enumeration)sealed类型层次结构的情况下),如果匹配不是详尽的.所以这段代码
val ccy: Currency = EUR
ccy match {
case EUR =>
println("Euro")
}
Run Code Online (Sandbox Code Playgroud)
会导致
警告:(27,7)匹配可能并非详尽无遗.
它将在以下输入上失败:USD
ccy match {
Enumeration提供withName())我认为最重要的区别是case对象可以序列化,而简单对象则不能.
这使得它们作为具有Akka-Remote的消息非常有用.
编辑:
正如RüdigerKlaehn指出的那样,这不是我们从case关键字中获得的唯一好处.还有:
对于课程另外:
apply和unapply实现性的伴随对象(此列表可能不详尽!)
| 归档时间: |
|
| 查看次数: |
2160 次 |
| 最近记录: |