Я предлагаю следующую схему:
abstract class A($params) {
// do common initialisation here
def construct() : A
def foo(...) = {
...
val bar = construct()
...
}
}
class B($moreparams) extends A($someparams) {
// do special initialisation here
def construct() = new B()
}
Все избыточности, которые у вас есть, составляют ровно одну строку на подкласс.Я считаю, что это небольшая цена за а) рабочее решение, которое б) не использует рефлексию (что нарушает практически все гарантии, которые предлагает вам система статического типа).
Мне все еще интересно, зачем вам это нужно construct
внутри A
.Запах рыбный.