case class copy 'method' mit übergeordneter Klasse
Ich möchte so etwas machen:
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")
Ich kann nicht, weil ich im Kontext von getIt dem Compiler nicht gesagt habe, dass jede Base eine 'copy'-Methode hat, aber copy ist auch keine Methode, also glaube ich nicht, dass es eine Eigenschaft oder eine abstrakte Methode gibt Ich kann Base hinzufügen, damit dies richtig funktioniert. Oder ist da?
Wenn ich versuche, Base als zu definierenabstract class Base{ def copy(myparam:String):Base }
, danncase class Foo(myparam:String) extends Base
Ergebnisse inclass Foo needs to be abstract, since method copy in class Base of type (myparam: String)Base is not defined
Gibt es eine andere Möglichkeit, dem Compiler das alles mitzuteilen?Base
Klassen werden Fallklassen in ihrer Implementierung sein? Ein Merkmal, das "hat die Eigenschaften einer Fallklasse" bedeutet?
Ich könnte Base zu einer Case-Klasse machen, aber dann erhalte ich Compiler-Warnungen, die besagen, dass die Vererbung von Case-Klassen veraltet ist.
Ich weiß, ich kann auch:
def getIt(f:Base)={
(f.getClass.getConstructors.head).newInstance("yeah").asInstanceOf[Base]
}
aber ... das scheint sehr hässlich.
Gedanken? Ist mein ganzer Ansatz nur "falsch"?
AKTUALISIEREN Ich habe die Basisklasse so geändert, dass sie das Attribut enthält, und die Case-Klassen haben das Schlüsselwort "override" verwendet. Dies spiegelt das eigentliche Problem besser wider und macht das Problem unter Berücksichtigung der Reaktion von Edmondo1984 realistischer.