Scala对象初始化时访问成员的坑

Scala对象初始化时访问成员的坑

先看如下代码:

doTest为入口,这个程序的输出是:

null

和期望不一样啊!

原因是Scala以整个类中的内容为构造方法,执行顺序是从基类到子类。运行method时,obj还没有初始化,于是就返回了null

因为obj不可变,所以这里也不能直接初始化。真正的解决方法是使用lazy关键字,它可以让成员在第一次使用时被初始化。话说在这个情况下,比不加lazy还要勤快啊。
于是改写成这样就正常了:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*