gpt4 book ai didi

android - kotlin setter 无限递归

转载 作者:IT老高 更新时间:2023-10-28 13:47:47 24 4
gpt4 key购买 nike

我正在 Android 上测试 kotlin,遇到了一个问题,即两个变量的 setter 在无限递归中被调用,因为它们在最初设置时试图相互更改。

这是一个示例代码

class Example {
var a: Int = 0
set(value) {
b = a+10
}

var b:Int = 0
set(value) {
a = b-10
}
}

然后说我使用以下代码:

val example = Example()
example.a = 10

它最终导致无限递归并最终导致堆栈溢出。 b 的二传手调用 a 的 setter进而调用 b 的 setter 再次。它会永远持续下去。

我希望能够更新 b 的值每当a已设置,但也会更新 a 的值每当b已设置。

Kotlin 专家有什么想法吗?在这种情况下,我是否需要制作类似 Java 的 setter,以便每当我为 a 赋值时,我的 setter 代码都不会被调用?或 b .还是我可以使用一些漂亮的 Kotlin 优点?

最佳答案

对于此示例,您只能计算其中一个属性,例如

var a: Int = 0

var b: Int
get() = 10 - a
set(value) { a = 10 - value }

不过,一般来说,Kotlin 不提供对其他属性的支持字段的访问。您必须手动编写它,例如

private var _a: Int = 0
var a: Int
get() = _a
set(value) {
_a = value
_b = 10 - value
}

private var _b: Int = 10
var b: Int
get() = _b
set(value) {
_b = value
_a = 10 - value
}

Kotlin 不会为这些属性生成自己的支持字段,因为它们从未被使用过。

关于android - kotlin setter 无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45787898/

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