在Scala中,静态值初始化似乎在调用main方法之前不会发生
发布时间:2020-12-16 08:59:15 所属栏目:安全 来源:网络整理
导读:我的 Scala版本: Scala code runner version 2.9.0.1 -- Copyright 2002-2011,LAMP/EPFL 在名为Static.scala的文件中给出此代码: object Main extends App { val x: String = "Hello,World!" override def main(args: Array[String]): Unit = { println(x)
我的
Scala版本:
Scala code runner version 2.9.0.1 -- Copyright 2002-2011,LAMP/EPFL 在名为Static.scala的文件中给出此代码: object Main extends App { val x: String = "Hello,World!" override def main(args: Array[String]): Unit = { println(x) } } 当我跑: scalac Static.scala && scala Main 我知道了: null 代替: Hello,World! 我认为x是静态的,因为它是在一个对象中定义的,并且它将在调用main方法之前初始化. 我究竟做错了什么?谢谢! 解决方法
这是因为您使用App特征的方式. App trait使用DelayedInit功能,该功能更改了类主体(包括字段初始化)的执行方式. App trait包括一个main方法,该方法在将args字段绑定到程序的参数之后执行类主体.由于你已经重写了main,因此没有发生这种初始化.使用App trait时,不应提供main方法.您应该将应用程序代码直接放在类主体中,或者不从App trait继承.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |