У меня есть два класса case, которые наследуются от абстрактного базового класса. Я хочу определить некоторые методы в абстрактном базовом классе, которые используют методы копирования в классах-наследниках (и, таким образом, возвращают экземпляр дочернего класса. )Есть ли способ сделать это, используя типы self?
Пример кода:
abstract class BaseClass(a: String, b: Int) {
this: case class => //not legal, but I'm looking for something similar
def doubleB(newB: Int) = this.copy(b = b * 2) //doesn't work because BaseClass has no copy
}
case class HasC(a: String, b: Int, c: Boolean) extends BaseClass(a, b) {
def doesStuffWithC(newC: Boolean) = {
...
}
}
case class HasD(a: String, b: Int, D: Double) extends BaseClass(a, b) {
def doesStuffWithD(newD: Double) = {
...
}
}
Благодаря этому вопросу я понял, как получить желаемый результат: Как использовать Scala, #39; эту типизацию, абстрактные типы и т. д. для реализации типа Self ? но это включает в себя добавление метода makeCopy в BaseClass и переопределение его вызовом копирования в каждом из дочерних case-классов, а синтаксис (, особенно для типа Self ), довольно сбивает с толку. Есть ли способ сделать это с помощью встроенного в Scala автоматического ввода?