экземпляр класса 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 'ответ.