gpt4 book ai didi

kotlin - 是否可以使用私有(private)辅助构造函数在 Kotlin 中分配一个 val?

转载 作者:行者123 更新时间:2023-12-05 08:21:41 25 4
gpt4 key购买 nike

我试图通过使用私有(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com