Задача сериализации класса данных класса Kotlin

Im немного запутанный для моего класса kotlin не работал, как ожидалось:

класс данных, используемый для проверки информации об обновлении:

data class UpdateInfo constructor(//kotlin class val description: String, val force: Int, val platform: String, val title: String, val url: String, @SerializedName("version") val versionCode: Int = 0 ) : Serializable { val isForceUpdate = force == 1 } 

также утилита, используемая для декодирования формы объекта json:

 public class JsonUtil {//java class private static final Gson gson; static { BooleanAdapter booleanAdapter = new BooleanAdapter(); gson = new GsonBuilder() .serializeNulls() .disableHtmlEscaping() .setLenient() .registerTypeAdapter(Boolean.class, booleanAdapter) .registerTypeAdapter(boolean.class, booleanAdapter) .create(); } } 

когда я его тестирую:

 val json = "{\"force\"=\"1\"}" val info = JsonUtil.fromJsonObject(json, UpdateInfo::class.java) println(info) println(info.force == 1) println(info.isForceUpdate) 

Я получил:

 UpdateInfo(description=null, force=1, platform=null, title=null, url=null,versionCode=0) true false 

Какие?? info.isForceUpdate = false ???
Тогда я попробовал lateinit или by lazy{} , все еще не работает. Итак, что мне делать … Я использую info.force==1 прямо сейчас, но я все еще хочу знать, почему это произошло.

    Проблема в том, что свойство val isForceUpdate = force == 1 вычисляется один раз при создании экземпляра класса и затем сохраняется в поле. Поскольку Gson использует Unsafe для создания экземпляра класса, в поле установлено значение по умолчанию false .

    Все, что вам нужно сделать, чтобы исправить это, – это изменить свойство на вычисленное свойство:

     val isForceUpdate get() = force == 1 

    так что значение вычисляется при любом вызове и не сохраняется в поле.