如何让 Kotlin getter 给我实际数据?

How to make Kotlin getter give me actual data?

据我所知,当您第一次调用 class 时,Kotlin 会生成 getter。因此,例如,以下代码将始终给我相同的答案:

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

如果有一个非空的 MyData 实例,那么它将一直提供这个实例,如果数据库的结果为空,我将始终获得 MyData 的新实例。我在这里可能是错的,所以请纠正我。

问题是如何更新 getter 的值? IE。大多数时候我想从数据库中获取数据,但在注销后我想从数据库中请求数据或者再次给我一个新实例。

如果我理解正确的话:

  1. 如果字段不为空你想得到值
  2. 如果它是 null 你想从数据库中获取它
  3. 如果数据库中不存在您要创建一个新实例

所有这些实例都应该保存到实例变量中。如果这是你想要的,你可以这样做:

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

请注意 var 而不是 val