Ответ 1
В Java они попытались решить эту проблему как метод clone
, который работает при вызове clone
во всех суперклассах, но это обычно считается сломанным и лучше всего устраняется по причинам, которые вы можете найти (например здесь).
Итак, в Scala, как genereally на Java, вам придется создать свой собственный метод копирования для произвольного класса, который позволит вам указать такие вещи, как глубокое или мелкое копирование полей.
Если вы сделаете класс a 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 не рекомендуется.