具有继承和默认参数的案例类

时间:2014-04-07 10:47:20

标签: scala inheritance

在Scala中是否有一种优雅的方式来使用带继承和默认构造函数参数的case类(或case classish语法)?我有点想要这样做(不重复超类的默认参数):

abstract class SuperClazz(id: String = "")
case class SubClazz(name: String = "", size: Int = 0) extends SuperClazz
val sub = SubClazz(id = "123", size = 2)

1 个答案:

答案 0 :(得分:2)

我想说如果不重复超级参数,就不可能做到。这是因为case类是特殊类型的scala类。 beacuse编译器使用 apply unapply 方法隐式生成伴随提取器对象,在这些方法中,它将不是类参数中未指定的参数。

请考虑此代码段

abstract class SuperClazz(id: String = "")
class SubClazz(name: String,id: String) extends SuperClazz {
    override def toString: String = "name: " + name + ",id: " + id
}
object SubClazz {
    def apply(name: String = "", id: String = "") = new SubClazz(name, id)
}

时更短更简单(关于toString方法略有不同)版本
case class SubClazz(name: String, id: String) extends SubClazz

被召唤。