我正在創建類的實例數組本身。Scala - 我們如何創建同一類的類實例?
class A (arg: Int) {
var a1 = new Array[A] (arg)
....
}
聲明它這樣在運行時給出「java.lang.NullPointerException」。有什麼辦法去除這個異常嗎?
我正在創建類的實例數組本身。Scala - 我們如何創建同一類的類實例?
class A (arg: Int) {
var a1 = new Array[A] (arg)
....
}
聲明它這樣在運行時給出「java.lang.NullPointerException」。有什麼辦法去除這個異常嗎?
我確定你正試圖在代碼中稍後訪問數組a1的元素。你有你的例外。代碼
我準備小塊進行論證:
class A (arg: Int) {
var a1=new Array[A] (arg)
def giveMeException(){
println(a1(0).a1.length)
}
}
object Program extends App {
val noExceptionA = new A(2);
noExceptionA.a1(0) = new A(0);
noExceptionA.a1(1) = new A(0);
val exceptionA = new A(2);
// Will print 0
noExceptionA.giveMeException();
// Will throw java.lang.NullPointerException
exceptionA.giveMeException();
}
嘿,非常感謝你!它幫助了很多! :) – user1726624
這一切都歸結到你想要這段代碼實現的目標:
var a1 = new Array[A] (arg)
我想你想的數組arg
A
類型的元素,但是這些元素應該是什麼?默認情況下,它們是null
(或基本類型爲0
)。後來你訪問該陣列(例如a1(0)
,顯然你NullPointerException
所以,你應該填寫創建後的陣列這裏是第一種方法:。
class A (arg: Int) {
var al = Array.fill(arg)(new A(arg)) //WRONG!
}
注意Array.fill(3)("Foo")
結果["Foo", "Foo", "Foo"]
陣列當你創建new A(arg)
時,你正在遞歸地調用new A(arg)
循環永遠不會結束我再也不知道你想達到什麼,所以這裏是一個正常工作的示例:
class A (arg: Int) {
var al = Array.fill(arg)(new A(arg - 1))
}
調用new A(3)
將創建一個數組[A(2), A(2), A(2)]
。輪流撥打A(2)
的每個電話將創建[A(1), A(1)]
。遞歸結束於new A(0)
,它創建一個空數組。
您能否提供堆棧跟蹤和更多代碼發生'NullPointerException'的行。 '新數組[A](len)'將創建一個數組,其中包含len NullPointers,它們被「保存」爲A的實例。 – xhochy