kotlin setter infinte递归
我正在测试Android上的kotlin,并遇到一个问题,两个变量的setter在一个infinte递归中被调用,因为它们在初始设置时试图互相改变。
这是一个示例代码
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
它最终导致一个infinte递归,最终是一个计算器。 b
的setter调用setter, a
又调用setter为b
。 它永远持续下去。
我希望能够在每次设置b
时更新b
的值,而且每当b
被设置时更新a的值。
那里的科特林专家有什么想法? 在这种情况下,我是否需要将Java设置为setter,以便在为a
或b
赋值时不会调用setter代码。 还是有一些漂亮的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将不会为这些属性生成自己的后台字段,因为它们从不使用。