延迟变量初始化

时间:2015-12-22 13:53:23

标签: scala initialization

我们说我有一个我无法立即初始化的变量,因为我不知道它的价值(因此lazy val对我不起作用)。我也无法控制对象创建的时刻,因为它是由框架处理的(例如Android应用程序中的Activity),因此我无法延迟创建整个对象。我不想使用var,因为它会带来不完整初始化和无效状态的风险。

到目前为止,我一直在使用以下方法:

class MyClass extends InterfaceWithDelayedInitialization {

  private val delayedValueP = Promise[Type]()
  private val delayedValueF = delayedValueP.future

  def onCreate(value: Type): Unit = {
    delayedValueP.successful(value)
  }

  def someOtherMethod(): Unit = {
    delayedValueF foreach { value =>
      // do something with value
    }
  }
}

但我不禁觉得这种方法有点臭(不像使用可变性和var那样臭)。

对于像这样的问题,是否有一些标准解决方案?

0 个答案:

没有答案