假设我有一个案例类,我将其扩展为
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
类型的对象?
答案 0 :(得分:4)
因为设计thats how copy
works with case class inheritance,并且是你不应该进行案例类继承的另一个一般原因(主要原因是打破相等的可能性)。
相反,让A
成为常规课程。请注意,如果您为copy
实施A
,则不会自动为B
生成一个。{/ p>