case class copy 'method' z superklasą

Chcę zrobić coś takiego:

sealed abstract class Base(val myparam:String)

case class Foo(override val myparam:String) extends Base(myparam)
case class Bar(override val myparam:String) extends Base(myparam)

def getIt( a:Base ) = a.copy(myparam="changed")

Nie mogę, ponieważ w kontekście getIt nie powiedziałem kompilatorowi, że każda baza ma metodę „kopiowania”, ale kopia nie jest tak naprawdę metodą, więc nie sądzę, aby istniała cecha lub metoda abstrakcyjna Mogę umieścić w bazie, aby to działało poprawnie. Czy istnieje?

Jeśli spróbuję zdefiniować bazę jakoabstract class Base{ def copy(myparam:String):Base }, następniecase class Foo(myparam:String) extends Base prowadzi doclass Foo needs to be abstract, since method copy in class Base of type (myparam: String)Base is not defined

Czy jest jakiś inny sposób, aby powiedzieć kompilatorowi, że wszystkoBase klasy będą klasami przypadków w ich implementacji? Jakaś cecha, która oznacza „ma właściwości klasy przypadku”?

Mogę sprawić, że Base będzie klasą sprawy, ale wtedy otrzymuję ostrzeżenia kompilatora mówiące, że dziedziczenie z klas przypadków jest przestarzałe?

Wiem, że mogę również:

def getIt(f:Base)={ 
  (f.getClass.getConstructors.head).newInstance("yeah").asInstanceOf[Base]
}

ale ... to wydaje się bardzo brzydkie.

Myśli? Czy całe moje podejście jest „złe”?

AKTUALIZACJA Zmieniłem klasę bazową, aby zawierała atrybut, i użyłem klasy case do użycia słowa kluczowego „override”. To lepiej odzwierciedla rzeczywisty problem i sprawia, że ​​problem jest bardziej realistyczny, biorąc pod uwagę odpowiedź Edmondo1984.

questionAnswers(7)

yourAnswerToTheQuestion