0__*_*0__ 5 constructor scala initialization traits
我需要一个智能的组件组合机制,它允许混合特性在组合组件之后初始化.以下是NullPointerException:
class Component {
def addListener(pf: PartialFunction[Any, Unit]) {}
}
trait DynamicComponent {
protected def component: Component
component.addListener {
case x =>
}
}
class Foo extends DynamicComponent {
protected val component = new Component
}
new Foo // -> NullPointerException
Run Code Online (Sandbox Code Playgroud)
以下内容对我来说不是选项:
protected lazy val component; 这会产生几十个需要变得懒惰的val,这是我不想要的.addListener在一个方法中,例如initDynamic(); 因为我会混合很多特质,我不想记得打电话给六种initFoo()方法.DelayedInit.这不适用于特征,至少根据scaladocs.我可以接一个init()电话,但只能在以下条件下:
init()语句是一个编译错误.Mar*_*ing 10
您可以通过使用早期定义来延迟特征的初始化.(参见scala语言规范的 5.1.6节)
class Foo extends {
protected val component = new Component
} with DynamicComponent
Run Code Online (Sandbox Code Playgroud)