在Scala中,什么是"早期初始化程序"?

oxb*_*kes 64 scala

在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的正常排序(类前的超类)之前初始化.

  • @nadavwr A `def` 将被类的方法表覆盖,从而保证将执行最具体的版本,而 `val` 初始化没有这样的事情——被覆盖的是 getter,而不是初始化。 (2认同)