我需要一个用于组件组合的智能机制,它允许混合特征在组合组件之后进行初始化。下面抛出一个 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
以下事情不是我的选择:
protected lazy val component
;这将产生 avalange 几十个需要变得懒惰的 vals,某事 我不要 . addListener
在一种方法中,例如initDynamic()
;因为我会混入很多特质,而且我不想记得给六个人打电话 initFoo()
方法。 DelayedInit
.这不适用于特征,至少根据 scaladocs。 我可以住一个
init()
调用,但仅限于以下条件:init()
是编译错误陈述。 最佳答案
您可以使用 来延迟特征的初始化。早期定义 . (参见 scala language specification 的第 5.1.6 节)
class Foo extends {
protected val component = new Component
} with DynamicComponent
关于scala - 延迟特征初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16251379/