我一直认为 scala 对象只是单例 java 对象的简写——也就是说,我希望它们表现得像具有保证单例实例化的对象。然后我遇到了这样的事情,我不明白:
object Test extends App{
var x ="a"
override def main(args:Array[String]):Unit = {
println(x )
}
}
它打印null而不是“a”。
查看生成的类,我得到一个 Test$.class ,它是对象定义;然而,实例值“a”是使用生成的delayedInit 在伴随的Test 类中定义的。有人可以阐明这是如何实例化的吗?显然,我对此的心智模型是不正确的。