【发布时间】:2017-02-11 06:12:37
【问题描述】:
我有一个基本特征
trait MyClass{
def items: List[MyClass]
def op(c: MyClass): MyClass
}
还有几个具体的子类型。
我希望每个子类型都从父 trait 实现这个方法 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
}
这感觉很多余,我觉得应该有更好的方法。我看过一些类似的情况,似乎人们求助于运行时反射来找到正确的构造函数。
有没有在编译时自动生成这个样板文件?
谢谢。
【问题讨论】:
标签: scala constructor boilerplate