在Scala中为超类生成构造函数

时间:2013-07-08 18:09:21

标签: scala inheritance case-class

给出简单的类层次结构

abstract sealed class Base(id: String)

case class Child1(id: String, value: Int) extends Base(id)

case class Child2(id: String, value: Long, file: File) extends Base(id)

我可以使用宏或类似的东西来避免将 id 传递给Base(并指示编译器为我生成这个)吗?使用单个参数并不难以传递它,但是在多个参数的情况下它会变得不舒服。

或者,如果我可以在子类中省略 id 的规范,并让编译器从基类中为我生成一个?

1 个答案:

答案 0 :(得分:3)

您可以将Base作为特征:

sealed trait Base {
  val id: String
}

case class Child1(id: String, value: Int) extends Base
case class Child2(id: String, value: Long, file: File) extends Base