Scala :Есть ли способ для родительского класса получить доступ к методам, определенным только потомками?

У меня есть два класса 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 автоматического ввода?

5
задан Community 23 May 2017 в 11:49
поделиться