此代码导致system
为“null:
object Main extends App {
val system = ActorSystem("mySystem")
override def main(args: Array[String]): Unit = {
println("Done")
}
}
但是如果我将system
的声明移到main
中,它就会被正确初始化。那是为什么?
答案 0 :(得分:5)
来自documentation of App
(强调我的):
注意事项
应该注意的是,这个特性是使用
DelayedInit
功能实现的,这意味着在执行main方法之前,对象的字段不会被初始化。还应该注意
main
方法不应该被覆盖:整个类体成为“主要方法”。
只做
object Main extends App {
val system = ActorSystem("mySystem")
println("Done")
}
或
object Main {
def main(args: Array[String]): Unit = {
val system = ActorSystem("mySystem")
println("Done")
}
}