Scala:复制派生案例类的对象

时间:2017-10-22 09:02:11

标签: scala

假设我有一个案例类,我将其扩展为

case class A(num: Int)

case class B(firstNum: Int, otherNum: Int) extends A(firstNum)

当我想要复制B类型的对象时,copy的签名只接受案例类A的参数。

B(1, 2).copy(num = 2) // compiles

B(1, 2).copy(firstNum = 2) // doesn't compile

为什么会这样做,以及如何复制(/更新)B类型的对象?

1 个答案:

答案 0 :(得分:4)

因为设计thats how copy works with case class inheritance,并且是你不应该进行案例类继承的另一个一般原因(主要原因是打破相等的可能性)。

相反,让A成为常规课程。请注意,如果您为copy实施A,则不会自动为B生成一个。{/ p>