我正在研究建立在 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/