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,以便在为ab赋值时不会调用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将不会为这些属性生成自己的后台字段,因为它们从不使用。