15.3. Kopiowanie instancji klas przypadku

Jeśli klasa przypadku nie definiuje, ani nie dziedziczy składowej o nazwie copy, to dodawana jest do niej definicja metody copy, która pozwala tworzyć kopie instancji klasy, jednocześnie umożliwiając ustawienie nowych wartości wybranych elementów. Lista parametrów tej metody odpowiada liście elementów klasy przypadku, z argumentami domyślnymi równymi wartościom elementów kopiowanej instancji. Wywołując metodę copy możemy uwzględnić te elementy, którym chcemy nadać nowe wartości w kopii, a pominąć pozostałe.

Plik CaseClassE.scala:
case class E(a:Int, b:String, c:Long)

Poniższe polecenia pokazują tworzenie nowych instancji klasy E, zdefiniowanej w pliku CaseClassE.scala, na podstawie instancji e1. Instancja e2 jest kopią instancji e1, utworzoną przez wywołanie metody copy z pustą listą parametrów. Instancja e3 jest kopią e1 ze zmienioną wartością pierwszego elementu. Instancja e4 jest kopią e1 ze zmienionymi wartościami elementów a i c.

scala> val e1 = new E(1,"e1",2L)
e1: E = E(1,e1,2)

scala> val e2 = e1.copy()
e2: E = E(1,e1,2)
scala> e1 eq e2
res0: Boolean = false

scala> val e3 = e1.copy(4)
e3: E = E(4,e1,2)

scala> val e4 = e1.copy(c=4L, a=5)
e4: E = E(5,e1,4)

Metoda copy nie jest tworzona jeśli klasa ma parametr powtórzony.

scala> case class E2(a: Int*)
defined class E2

scala> val e5 = E2(1,2)
e5: E2 = E2(WrappedArray(1, 2))

scala> e5.copy()
<console>:14: error: value copy is not a member of E2
       e5.copy()
          ^

Język programowania Scala Wydanie 2. Copyright © Grzegorz Balcerek 2016

Licencja Creative Commons

Ten utwór jest dostępny na licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowe.

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.