2016-06-20 99 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是不会工作的。