You*_* Qi 5 kotlin android-room android-livedata
有一个房间道如下
@Dao
public abstract class AccountDao {
@Query("SELECT * FROM Account LIMIT 0,1")
public abstract Account readAccount();
}
Run Code Online (Sandbox Code Playgroud)
get()和by lazy以下样本之间有什么区别?
open val account: LiveData<Account>
get() = accountDao.readAccount()
Run Code Online (Sandbox Code Playgroud)
open val account: LiveData<Account> by lazy { accountDao.readAccount() }
Run Code Online (Sandbox Code Playgroud)
Tod*_*odd 10
不同之处在于函数主体(accountDao.readAccount())将执行多少次。
该lazy代表将执行拉姆达一次性第一次被访问和记忆的结果。如果再次调用,则返回该缓存的结果。
另一方面,定义getter(get())将每次执行函数主体,每次都返回一个新结果。
例如,假设我们有一个Foo同时具有getter和lazy值的类:
class Foo {
val getterVal: String
get() = System.nanoTime().toString()
val lazyVal: String by lazy { System.nanoTime().toString() }
}
Run Code Online (Sandbox Code Playgroud)
然后使用它:
fun main() {
with(Foo()) {
repeat(2) {
println("Getter: $getterVal")
println("Lazy: $lazyVal")
}
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这打印:
Getter: 1288398235509938
Lazy: 1288398235835179
Getter: 1288398235900254
Lazy: 1288398235835179
Run Code Online (Sandbox Code Playgroud)
我们可以看到,getter每次都返回一个新计算的值,而惰性版本则返回相同的缓存值。
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |