В Java они пытались решить эту проблему методом clone
, который работает, вызывая clone
во всех суперклассах, но обычно это считается неработоспособным и его лучше избегать, по причинам, которые вы можете посмотреть (например, здесь ).
Так что в Scala, как обычно в Java, вам придется создавать собственный метод копирования для произвольного класса, который позволит вам указывать такие вещи, как глубокое или мелкое копирование полей.
Если вы сделаете свой класс case class
, вы получите copy
метод бесплатно. Это на самом деле лучше, потому что вы можете обновить любое из полей одновременно:
case class A(n: Int)
val a = A(1) // a: A = A(1)
val b = a.copy(a.n) // b: A = A(1)
val c = a.copy(2) // c: A = A(2)
Однако наследование от case-классов устарело.