class Person(){
val name : String
def this(n : String) {
this()
this.name = n
}
}
compile time error : reassignment to val
我是scala的新手,到目前为止我学习了如何使用主构造函数和case类来初始化数据成员。如果有办法在这个中初始化 val数据成员,我只是在徘徊。 var data member 的初始化工作正常如下: -
class Person(){
var name : String = _
def this(n : String) {
this()
this.name = n
}
}
答案 0 :(得分:5)
初始化后你无法分配给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)
来获取具有自定义初始化的新人,但构造函数本身仍然会收到构建新实例所需的全部内容,其中所有值仅分配一次。