如何让 Kotlin getter 给我实际数据?
How to make Kotlin getter give me actual data?
据我所知,当您第一次调用 class 时,Kotlin 会生成 getter。因此,例如,以下代码将始终给我相同的答案:
val instance
get() = getFromDb() ?: MyData()
如果有一个非空的 MyData
实例,那么它将一直提供这个实例,如果数据库的结果为空,我将始终获得 MyData
的新实例。我在这里可能是错的,所以请纠正我。
问题是如何更新 getter 的值? IE。大多数时候我想从数据库中获取数据,但在注销后我想从数据库中请求数据或者再次给我一个新实例。
如果我理解正确的话:
- 如果字段不为空你想得到值
- 如果它是 null 你想从数据库中获取它
- 如果数据库中不存在您要创建一个新实例
所有这些实例都应该保存到实例变量中。如果这是你想要的,你可以这样做:
var instance
get() = field ?: getFromDb().also { field = it } ?: MyData().also { field = it }
请注意 var
而不是 val
据我所知,当您第一次调用 class 时,Kotlin 会生成 getter。因此,例如,以下代码将始终给我相同的答案:
val instance
get() = getFromDb() ?: MyData()
如果有一个非空的 MyData
实例,那么它将一直提供这个实例,如果数据库的结果为空,我将始终获得 MyData
的新实例。我在这里可能是错的,所以请纠正我。
问题是如何更新 getter 的值? IE。大多数时候我想从数据库中获取数据,但在注销后我想从数据库中请求数据或者再次给我一个新实例。
如果我理解正确的话:
- 如果字段不为空你想得到值
- 如果它是 null 你想从数据库中获取它
- 如果数据库中不存在您要创建一个新实例
所有这些实例都应该保存到实例变量中。如果这是你想要的,你可以这样做:
var instance
get() = field ?: getFromDb().also { field = it } ?: MyData().also { field = it }
请注意 var
而不是 val