GSON不能用自定义getter来反序列化Kotlin类

我有一堂课

class Address { var address1: String? = null } 

简单的JSON

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

所以我想要反序列化,所以我只是写

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

它完美的作品。

但是,如果我添加自定义getter

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

我正在得到

 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 

那么我能做些什么才能使它正常工作?

我看到的一个解决方案是根本不需要定制getters,但是如果我真的需要它们呢?

你应该使用该field

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

问题是,在自己的setter中使用address1导致递归调用序列。 相反, field限定符指的是后台字段。 递归序列导致您遇到的StackOverflowError

但是实际上,你也应该考虑一下你的属性:它被声明为一个可以为空的String ,但是你不允许null因为你把它映射到一个空的String""真的接受的地址? 简单地做val address1: String = ""

您正尝试通过其getter方法访问属性。 这又将调用其getter方法等等…这意味着它正在递归调用自己,直到异常。

使用field操作员来访问其值

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

编辑

为什么允许可空性,如果它没有任何意义? 让Kotlin照顾这个问题。 做就是了

 var address1: String = ""