sas*_*has 1 overriding scala nullpointerexception
在以下情况下
class A(name:String, job:String)
{
def profile = name + " " + job
}
class B(name:String, job:String)
{
val a = new A(name,job)
val b = a.profile
}
Run Code Online (Sandbox Code Playgroud)
关于初始化B和覆盖val a
val b = new B("Sasha","Day dream")
{ override val a = new A("John-Wick","Kill") }
Run Code Online (Sandbox Code Playgroud)
我得到NullPointerException了val b = a.profile。我的问题是为什么重写的valnull?做上面的事情是不好的做法吗?
这是几个事实的组合:
ain val b = a.profile是指getter方法,它是var由覆盖的getter(和setter,用于)override val a。因此,它从子类返回该字段的值。
子类字段在子类构造函数中初始化。
该B构造函数运行前的子类的构造函数,而子类字段的默认值null。
常见的解决方法是将切换val到lazy val,因此在首次使用时将它们初始化。
| 归档时间: |
|
| 查看次数: |
49 次 |
| 最近记录: |