экземпляр класса case «метод» с суперклассом

Я хочу сделать что-то вроде этого:

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")

Я могу'т, потому что в контексте getIt я несказал компилятору, что каждая база имееткопия» метод, но копировать нетна самом деле это не метод, так что я нене думаю, что тамЭто черта или абстрактный метод, который я могу использовать в Base для правильной работы. Или есть?

Если я попытаюсь определить Base какabstract class Base{ def copy(myparam:String):Base }, затемcase class Foo(myparam:String) extends Base результаты вclass Foo needs to be abstract, since method copy in class Base of type (myparam: String)Base is not defined

Есть ли другой способ сказать компилятору, что всеBase классы будут падежными в их реализации? Некоторая черта, которая означает "имеет свойства класса case "?

Я мог бы сделать Base классом case, но затем я получил предупреждения компилятора о том, что наследование от классов case устарело?

Я знаю, что могу также:

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

но ... это кажется очень уродливым

Мысли? Весь мой подход простонеправильно" ?

ОБНОВИТЬ Я изменил базовый класс, чтобы он содержал атрибут, и сделал так, чтобы классы дел использовали "переопределение» ключевое слово. Это лучше отражает реальную проблему и делает проблему более реалистичной с учетом Edmondo1984 'ответ.

Ответы на вопрос(7)

Ваш ответ на вопрос