加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 延迟特征初始化

发布时间:2020-12-16 18:43:48 所属栏目:安全 来源:网络整理
导读:我需要一个智能的组件组合机制,它允许混合特性在组合组件之后初始化.以下抛出NullPointerException: class Component { def addListener(pf: PartialFunction[Any,Unit]) {}}trait DynamicComponent { protected def component: Component component.addLis
我需要一个智能的组件组合机制,它允许混合特性在组合组件之后初始化.以下抛出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组件;这会产生几十个需要变得懒惰的val,这是我不想要的.
>将addListener放入方法中,例如initDynamic();因为我将混合许多特征,我不想记得调用半打initFoo()方法.
>使用DelayedInit.这不适用于特征,至少根据scaladocs.

我可以使用单个init()调用,但仅限于以下条件:

>所有混合的特征都可以很容易地在这一个调用中声明被调用
>忘记init()语句是一个编译错误.

解决方法

您可以通过使用早期定义来延迟特征的初始化. (见 scala language specification第5.1.6节)

class Foo extends {
  protected val component = new Component
} with DynamicComponent

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读