在Martin Odersky 最近发表的关于 Scala 程序员能力水平的文章中,在专家库设计师部分,他包含了术语"早期初始化者".
在Scala编程中没有提到这些.这些是什么?
Dan*_*ral 100
早期初始化器是子类的构造函数的一部分,该子类旨在在其超类之前运行.例如:
abstract class X {
val name: String
val size = name.size
}
class Y extends {
val name = "class Y"
} with X
Run Code Online (Sandbox Code Playgroud)
如果代码是作为代码编写的
class Z extends X {
val name = "class Z"
}
Run Code Online (Sandbox Code Playgroud)
在Z初始化时会发生空指针异常,因为size在初始化name的正常排序(类前的超类)之前初始化.