如何在某种意义上使案例类“最终”?

时间:2013-11-25 04:43:40

标签: scala functional-programming

因此,Scala案例类与ADT类似,但在ADT的情况下,声明具有完整的案例列表,而案例类则不是,因此采用此案例类“family”的实例的函数可能会收到意外的事情,产生运行时错误。如何缓解这个问题?假设我有以下代码

trait Animal

case class Cat extends Animal
case class Dog extends Animal

def say(a: Animal) = a match {
  case Cat => "meow"
  case Dog => "woof"
}

然后有人可以扩展Animal特征并调用say函数。如何禁止任何进一步扩展的特性?

1 个答案:

答案 0 :(得分:9)

你可以制作动物特质sealed。含义:sealed trait Animal

sealed traits只能通过在同一源文件中定义的类进行扩展。

通过这种方式,如果您在Animal上使用模式匹配时考虑了所有情况,编译器也会发出警告。