hum*_*lue 2 constructor field kotlin
我试图通过使用私有构造函数来分配类字段来减少代码重复,但这似乎不可能。
我想做的是这里的例子:
class Foo {
private val bar: Int
private val baz: Int
constructor(bar: Int, baz: Int) : this(baz) {
this.bar = bar
}
constructor(bar: String, baz: Int) : this(baz) {
this.bar = bar.toInt()
}
private constructor(baz: Int) {
this.baz = baz
}
}
Run Code Online (Sandbox Code Playgroud)
另一种可行的方法是执行以下操作,但我对此不满意:
class Foo {
private val bar: Int
private val baz: Int
constructor(bar: Int, baz: Int) {
this.bar = bar
this.baz = baz
}
constructor(bar: String, baz: Int) {
this.bar = bar.toInt()
this.baz = baz
}
}
Run Code Online (Sandbox Code Playgroud)
需要明确的是,我对作业的重复并不满意this.baz。
这在 Kotlin 中根本不可能,还是我错过了什么?
您应该将其重写为:
class Foo(
private val bar: Int,
private val baz: Int,
) {
constructor(bar: String, baz: Int) : this(bar.toInt(), baz)
}
Run Code Online (Sandbox Code Playgroud)
构造函数(Int, Int)已成为主构造函数,初始化所有值。第二个构造函数委托主构造函数。
您在非工作代码中声明的前两个辅助构造函数无法重新分配 s val,因为它们委托给另一个构造函数,并且假定该构造函数初始化了所有必要的属性。但在本例中,情况并非如此,因此您会收到另一个错误。