在主构造函数中初始化时重新分配给 val
reassignment to val while initializing in primary constructor
class Person(){
val name : String
def this(n : String) {
this()
this.name = n
}
}
compile time error : reassignment to val
我是 scala 的新手,到目前为止我学会了如何使用主构造函数和 case 类 来初始化数据成员。我只是在徘徊,如果有一种方法可以在 this 中初始化 val 数据成员 。 var 数据成员 的初始化在下面工作正常:-
class Person(){
var name : String = _
def this(n : String) {
this()
this.name = n
}
}
您不能在初始化后分配给 val。在 Scala 中,class 的主体是构造函数,您可以查看示例 here。
通常,您只需将主构造函数本身中的所有变量定义为 "class parameters":如果您需要接收用于初始化的名称,则为 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)
来获得一个具有自定义初始化的新人,但构造函数本身仍然接收构建新实例所需的所有内容,其中所有值仅分配一次。
class Person(){
val name : String
def this(n : String) {
this()
this.name = n
}
}
compile time error : reassignment to val
我是 scala 的新手,到目前为止我学会了如何使用主构造函数和 case 类 来初始化数据成员。我只是在徘徊,如果有一种方法可以在 this 中初始化 val 数据成员 。 var 数据成员 的初始化在下面工作正常:-
class Person(){
var name : String = _
def this(n : String) {
this()
this.name = n
}
}
您不能在初始化后分配给 val。在 Scala 中,class 的主体是构造函数,您可以查看示例 here。
通常,您只需将主构造函数本身中的所有变量定义为 "class parameters":如果您需要接收用于初始化的名称,则为 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)
来获得一个具有自定义初始化的新人,但构造函数本身仍然接收构建新实例所需的所有内容,其中所有值仅分配一次。