GSON no puede deserializar la class Kotlin con getter personalizado

Bueno, tengo una class

class Address { var address1: String? = null } 

Y simple json

 String jsonString = "{\"address1\":\"test\"}"; 

Entonces, todo lo que quiero deserializar es que solo escribo

  Gson gson = new GsonBuilder().create(); Address address = gson.fromJson(jsonString, Address.class); 

Y funciona perfectamente.

Pero si agrego getter personalizado

 class Address { var address1: String? = null get() = address1 ?: "" } 

Me estoy poniendo

 java.lang.StackOverflowError at ru.reksoft.okey.models.Address.getAddress1(Address.kt:8) at ru.reksoft.okey.models.Address.getAddress1(Address.kt:8) //and here are a lot of same lines 

Entonces, ¿qué puedo hacer para que funcione correctamente?

La única solución que veo es eliminar getters personalizados en absoluto, pero ¿y si realmente los necesito?

Deberías trabajar con el field lugar:

 class Address { var address1: String? = null get() = field ?: "" } 

El problema es que usar address1 dentro de su propio setter conduce a una secuencia de llamadas recursiva. En cambio, el calificador de field se refiere al campo de respaldo . La secuencia recursiva lleva al StackOverflowError que encontraste.

Pero, en realidad, también debe pensar sobre el sentido de su propiedad: se declara como una String null , pero no permite null ya que se asigna a una String vacía. ¿Es "" realmente aceptado para la dirección? Sería mucho mejor simplemente hacer val address1: String = "" .

Está intentando acceder a una propiedad en su método getter. Que a su vez llamará a su método getter y así sucesivamente … Lo que significa que se está llamando recursivamente hasta la exception.

use el operador de field para acceder a su valor

 var address1: String? = null get() = field ?: "" 

EDITAR

¿Por qué permitir la nulabilidad si no tiene ningún sentido? Deje que Kotlin se encargue del problema. Solo haz

 var address1: String = "" 
  • ¿Por qué Kotlin no siguió la syntax de Java?
  • ¿Cómo hacer una propiedad opcional / nulable en hibernate-validator?
  • Procesador de anotación Kotlin: no puede hacer que funcione
  • Solo el último elemento agregado a RecyclerView en Android (Kotlin)
  • Secuencia de destejido, idioma funcional / de transmisión de Kotlin
  • Los enlaces de fábrica Kodein están lanzando NotFoundException
  • Android kotlin: no se puede leer el file de class
  • ¿Cómo crear una matriz genérica llena de nulos en Kotlin?
  • Compruebe si RecyclerView se desplaza hacia arriba (findFirstCompletelyVisibleItemPosition no funcionará)
  • MVP + RxJava - ¿Poner los progtwigdores en el presentador o en el interaccionador?
  • Kotlin JPA encapsula OneToMany