一个奇怪的NullPointerException异常的代码放在这里:在斯卡拉
abstract class Element {
def contents: Array[String]
val height = contents.length
val width = if(height ==0) 0 else contents(0).length
override def toString = contents(0)
}
class ArrayElement(override val contents: Array[String]) extends Element
class LineElementT(s: String) extends Element {
override def contents = Array(s)
}
class LineElementF(s: String) extends Element {
override val contents = Array(s)
}
这三个子类都OK,除了LineElementF
,与val lef = new LineElementF("Wrong")
谢谢,但你能告诉我为什么其他两个子类运作良好吗? – monk
区别在于,你将'contents'一次定义为'val',一次定义为'def。 'val'的右边部分在施工时进行评估,这是'def'at通话时间之一。您可以将内容声明为“lazy val contents”,以便在第一次调用它时仅对它进行一次评估。 –
仍然困惑,但非常感谢 – monk