2016-06-20 107 views
0

當我沒有值初始化它時,我需要創建一個類。稍後我會分配值。例如下面的代碼,它是正確的嗎?初始化類成員遲到

case class MyClass (val a: Int, val b: Int) 

val c = MyClass (null, 1) 

// later in the code 
c.a = 2 
+0

試着以不同的方式思考你的代碼。考慮不使用空值而不重新賦值,例如,你的代碼是什麼樣的? – nmat

回答

1

案例類是默認不可改變的,所以你不需要val在你的領域聲明的前面:

// Instead of this 
case class MyClass(val a: Int, val b: Int) 

// Do this 
case class MyClass(a: Int, b: Int) 

這就是說,你不能重新分配領域,而不是你要創建實例的新副本,新的價值:

// Instead of this 
c.a = 2 

// Do this 
val updatedC = c.copy(a = 2) 
0

如果你想分配的東西后,它不能val

case class MyClass (var a: Int, val b: Int) 

val c = MyClass(0, 1) 

// later in the code 
c.a = 2 

另外Int不是參考類型,所以null是不會工作的。