【发布时间】:2014-04-26 15:47:45
【问题描述】:
我正在研究“Scala 中的编程”,它说您可以使用字段覆盖无参数方法,广告给出了以下示例:
abstract class Element {
def contents: Array[String]
val height: Int = contents.length
val width: Int = if (height == 0) 0 else contents(0).length
}
class ArrayElement(conts: Array[String]) extends Element {
val contents:Array[String] = conts
}
val a = Array("Hello", "mom")
println(a(0))
val x = new ArrayElement(a)
println(x.contents)
println("Hello, " + x.height)
但是,这段代码为我产生了一个空指针异常。用“def contents:”替换“val contents:”可以正常工作。如果内容数组确实被正确传递,我无法真正理解空指针异常的来源。它似乎来自“val height = contents.length”行,因为用“def height”替换那些也可以正确运行。我对这个例子有什么不明白的地方?
【问题讨论】:
-
defs、lazy vals 和早期的初始化器会帮助你:stackoverflow.com/questions/4712468/…