Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Kotlin getter给我实际数据?_Kotlin_Getter - Fatal编程技术网

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

如何让Kotlin getter给我实际数据?,kotlin,getter,Kotlin,Getter,正如我所知,Kotlin在您第一次调用类时生成getter。例如,下面的代码总是给出相同的答案: val instance get() = getFromDb() ?: MyData() 如果有一个非空的MyData实例,那么它将一直提供这个实例,如果DB的结果为空,我将始终获得MyData的新实例。我可能错了,如果我错了,请纠正我 问题是如何更新getter的值?也就是说,大多数时候我想从数据库中获取数据,但在注销后,我想从数据库中请求数据或再次给我一个新实例。如果我正确理解情况:

正如我所知,Kotlin在您第一次调用类时生成getter。例如,下面的代码总是给出相同的答案:

val instance
    get() = getFromDb() ?: MyData()
如果有一个非空的
MyData
实例,那么它将一直提供这个实例,如果DB的结果为空,我将始终获得
MyData
的新实例。我可能错了,如果我错了,请纠正我


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

如果我正确理解情况:

  • 如果字段不为null,则需要获取值
  • 如果为空,则希望从数据库中获取它
  • 若数据库中不存在该实例,则要创建一个新实例
  • 所有这些实例都应该保存到实例变量中。如果这是您想要的,您可以这样做:

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

    请不要使用
    var
    而不是
    val

    你写这篇文章的方式,它是这样工作的:如果
    getFromDb()
    不为空,它将返回它,否则它将返回类的新实例
    MyData()
    可以编辑你的问题并准确解释你需要什么?此外,它将调用getter(因此,每次尝试访问属性时(不仅仅是第一次),都要调用
    getFromDb()
    )。因此,它可能不会总是给出相同的答案。@gidds因此,它不会一次性存储从数据库获取的数据,但每次都会发出一个数据库请求,对吗?如果我需要缓存这些数据,我需要创建一个单独的变量?@SaeedEntezari换句话说,Kotlin是否会在第一次调用后缓存一个值,是否会使用缓存值?