scala - 强制初始化 Scala 单例对象

标签 scala object

我正在研究建立在 Dozer 之上的自动映射框架。我不会详细说明,因为它与问题无关,但总的来说,它应该允许从 A 类轻松转换到 B 类。我想注册一个类的伴随对象的投影。

下面是我希望它如何工作的(简化)示例,以及确保投影正确注册的规范测试。

不幸的是,这行不通。据我所知,这是因为没有初始化 A 伴随对象。事实上,如果我在 A 对象上调用任何方法(如注释掉的 hashCode 调用,投影被正确注册。

我的问题是 - 如何在 JVM 启动后立即自动初始化 A 对象?如有必要,我不介意扩展 Trait 或其他东西。

谢谢。

class A {
  var data: String = _
}

class B {
  var data: String = _
}

object A {
  projekt[A].to[B]

}

"dozer projektor" should {
  "transform a simple bean" in {
//    A.hashCode
      val a = new A
      a.data = "text"
      val b = a.-->[B]

      b.data must_== a.data
  }
}

最佳答案

简短的回答:你不能。 Scala 对象是惰性的,在第一次引用之前不会初始化。您可以引用该对象,但随后您需要一种方法来确保执行代码得到执行,从而将问题还原为原始问题。

关于scala - 强制初始化 Scala 单例对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6249569/

相关文章:

javascript - 如何对 Javascript 对象进行排序,或将其转换为数组?

c++ - 类对象的声明混淆

scala - 结合 `OptionT` 和 `EitherT` 来处理 `Future[Either[Error, Option[T]]]`

scala - 在 scala 中,在 toMap 之后添加不相关的行时编译错误消失

java - java hashmaps 的 get() 函数

c++ - 如何在 C++ 中使用 for 循环创建多个对象?

javascript - 为什么 Object.toString 会抛出 SyntaxError 而 Array.slice 不会?

scala - 如何在 Jupyter IPython Notebook 中安装 Scala?

scala - 更强大的 getOrElse?

java - 使用Spark API如何处理大型目录树?