У меня есть базовая чертаКак сбрасывать шаблон для строительства класса scala?
trait MyClass{
def items: List[MyClass]
def op(c: MyClass): MyClass
}
и несколько конкретных подтипов.
Я хочу, чтобы каждый из подтипов реализовал этот метод op
из родительского признака, но единственная разница в реализации - это класс, который они строят.
class Class1(override val items: List[MyClass]) extends MyClass = {
def op(c: MyClass): MyClass = new Class1(items.map{_.op(c)})
//other stuff
}
class Class2(override val items: List[MyClass]) extends MyClass = {
def op(c: MyClass): MyClass = new Class2(items.map{_.op(c)})
//other stuff
}
class Class3(override val items: List[MyClass]) extends MyClass = {
def op(c: MyClass): MyClass = new Class3(items.map{_.op(c)})
//other stuff
}
Это кажется довольно избыточным, и я чувствую, что должен быть лучший способ. Я посмотрел на некоторые подобные ситуации, и кажется, что люди прибегают к отражению во время выполнения, чтобы найти правильный конструктор.
Есть ли способ автоматически сгенерировать этот шаблон во время компиляции?
Спасибо.