class Person(){
val name : String
def this(n : String) {
this()
this.name = n
}
}
<小时/>
compile time error : reassignment to val
我是 scala 的新手,到目前为止我学会了如何使用主构造函数和案例类来初始化数据成员。我只是在徘徊,是否有一种方法可以在 this 中初始化 val 数据成员。 var 数据成员 的初始化工作正常:-
class Person(){
var name : String = _
def this(n : String) {
this()
this.name = n
}
}
最佳答案
初始化后您无法分配给 val。在Scala中,类的主体是构造函数,你可以看到例子here 。
一般来说,您只需将主构造函数本身中的所有变量定义为“类参数”:class Person(val name: String)
(如果您需要接收名称进行初始化)或 class Person() { val name = 'Joe' }
如果已修复。
这对于 Java 来说可能相当令人惊讶,因为您习惯于使用构造函数来生成值并直接构建对象。对于这种情况,最好的解决方案是在伴生对象上使用 apply 方法:
class Person(val name: String)
object Person() {
def apply(db: SomeDBConnectionWrapper, id: Int) = new Person(db.fetchName(id))
}
这允许您调用 Person(db, 3)
来获取具有自定义初始化的新人,但构造函数本身仍然接收构造新实例所需的所有内容,其中所有值仅被分配一次。
关于scala - 在主构造函数中初始化时重新分配给 val,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31661729/