我试图通过使用私有(private)构造函数来分配类字段来减少代码重复,但这似乎不可能。
我想做的是这里的例子:
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
}
}
另一种可行但我不满意的方法是执行以下操作:
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
}
}
明确地说,我对 this.baz
作业的复制不满意。
这在 Kotlin 中是不可能的,还是我遗漏了什么?
最佳答案
您应该将其重写为:
class Foo(
private val bar: Int,
private val baz: Int,
) {
constructor(bar: String, baz: Int) : this(bar.toInt(), baz)
}
(Int, Int)
构造函数已成为主构造函数,初始化所有值。第二个构造函数委托(delegate)主构造函数。
您在非工作代码中声明的前两个辅助构造函数不能重新分配 val
,因为它们委托(delegate)给另一个构造函数,并且假设该构造函数初始化了所有必要的属性。尽管在这种情况下,它没有,所以你会得到另一个错误。
关于kotlin - 是否可以使用私有(private)辅助构造函数在 Kotlin 中分配一个 val?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70580796/
相关文章:
java - 错误 :Kotlin: Module was compiled with an inc
gradle - 如何在 GitHub 工作流程中重用 gradle 缓存
c - 为什么这个计算字符串长度的 C 程序会给出错误的输出?
typescript - zod:将字符串转换为数字后设置最小最大值
python - 带有 python docker 容器的 AWS Lambda 的无效入口点
c# - 循环中 Enumerable Count 方法的性能
python - 如何在句子中交替替换单词中的大小写字母? Python