Как заставить Kotlin геттер давать мне актуальные данные? - PullRequest
0 голосов
/ 14 февраля 2020

Как я знаю, Kotlin генерирует геттеры при первом вызове класса. Так, например, следующий код всегда будет давать мне один и тот же ответ:

val instance
    get() = getFromDb() ?: MyData()

Если есть экземпляр, не равный нулю MyData, он будет выдавать этот экземпляр все время, и если результат из БД null, я всегда получу новый экземпляр MyData. Я могу ошибаться здесь, так что поправьте меня, если я.

Вопрос в том, как я могу обновить значение геттера? Т.е. большую часть времени я хочу получить данные из базы данных, но после выхода из системы я хочу запросить данные из БД или просто дать мне новый экземпляр еще раз.

1 Ответ

1 голос
/ 15 февраля 2020

Если я правильно понимаю ситуацию:

  1. Если поле не нулевое, вы хотите получить значение
  2. Если оно нулевое, вы хотите получить его из базы данных
  3. Если он не существует в базе данных, вы хотите создать новый экземпляр

И все эти экземпляры должны быть сохранены в переменной экземпляра. Если это то, что вы хотите, вы можете сделать что-то вроде этого:

var instance
    get() = field ?: getFromDb().also { field = it } ?: MyData().also { field = it }

Пожалуйста, отметьте var вместо val

...