假设我有一个这样的课程
class Job(args:String) {
def config:Map[String,String] = ...
}
我想创建一个可以与此类混合使用的特征,以添加更多配置选项。所以我做了类似的事情
trait ExtraConfig { self:Job =>
override def config = self.config ++ Map("extra","config")
}
不幸的是,这并没有编译,因为self.config变为自递归。
我试过
trait ExtraConfig extends Job {}
但是工作正在采用构造函数参数,我不知道如何通过它。
解决这个问题的最佳方法是什么?
答案 0 :(得分:0)
您正在寻找abstract override
修饰符,但要使用它,您需要显式扩展Job
类,然后在您的特性中,您可以使用超类的成员:
class Job(args:String) {
def config:Map[String,String] = Map.empty
}
trait ExtraConfig extends Job {
abstract override def config =
super.config ++ Map("extra" -> "config")
}
val job = new Job("name") with ExtraConfig