kotlin setter infinte recursión

Estoy probando kotlin en Android y me encontré con un problema donde los progtwigdores de dos variables son llamados en una recursión poco frecuente porque intentan cambiarse cuando están originalmente configurados.

Aquí hay un código de muestra

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

Y digo que luego uso el siguiente código:

 val example = Example() example.a = 10 

Termina causando infinte recursiones y eventualmente un stackoverflow. El colocador para b llama al colocador por a que a su vez llama al colocador para b nuevo. Y continúa para siempre.

Quiero poder actualizar el valor de b siempre que se establezca a, pero también actualizo el valor de a cuando se establece b .

¿Alguna idea de los expertos de Kotlin? ¿Tendría que hacer que Java como setters en este caso para que mi código setter no se llame cada vez que asigno un valor a b ? ¿O hay alguna bondad ingeniosa de Kotlin que pueda usar?

Para este ejemplo, solo se puede calcular una de las properties, por ejemplo

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

En general, sin embargo, Kotlin no proporciona acceso a los campos de respaldo de otras properties. Tendrás que escribirlo manualmente, por ejemplo

 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 no generará sus propios campos de respaldo para estas properties porque nunca se utilizan.

  • Encuentra la última ocurrencia de un String en una matriz usando Kotlin
  • : compileKotlin falla en Gradle (proyecto mixto Java + Kotlin)
  • Con el complemento 'kotlin-kapt', Android Studio no proporciona errores específicos sobre Dagger 2
  • No se puede iniciar el animador en una vista separada
  • Convirtiendo el método Java "Callable <T>" a Kotlin
  • Incrementos causa falla de compilation
  • Kotlin: ¿Cómo verificar si enum contiene una cadena dada sin interferir con las excepciones?
  • Práctica recomendada para convertir el código de Java utilizado para copyr files de activos en la carpeta de caching de Android a Kotlin
  • No se pudo encontrar o cargar la class principal cuando se usa un package específico
  • ¿Podemos lograr security de tipo de time de compilation para una unión de types que no podemos controlar?
  • Renderiza la respuesta json en Kotlin