W Javie, starali się rozwiązać tego problemu clone
metoda, która działa poprzez wywoływanie clone
we wszystkich super-klas, ale ten jest powszechnie uważany za złamane i najlepiej unikać, ze względu na ty może wyszukać (na przykład here).
Tak więc w Scali, tak jak w Javie, musisz stworzyć własną metodę kopiowania dla dowolnej klasy, która pozwoli ci określić takie rzeczy, jak głębokie lub płytkie kopiowanie pól.
Jeśli utworzysz klasę case class
, otrzymasz bezpłatnie metodę copy
. To rzeczywiście lepiej, ponieważ można aktualizować dowolne pole w tym samym czasie:
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)
Jednak dziedziczenie z klas sprawa jest przestarzała.
Pamiętaj, że nie musisz wykonywać kopii, jeśli zachowujesz niezmienność obiektów. –