一個奇怪的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