在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)
答案 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
被召唤。