【发布时间】:2021-07-13 04:27:20
【问题描述】:
使用延迟初始化、私有设置器和使用昂贵方法更改值的能力来实现变量的最佳方法是什么?
我的意思是这样的:
private const val NO_INIT = "noInit"
class LazyUpdatableVarClass {
private val initValue by lazy { expensive() }
var value = NO_INIT
private set
get() {
if (field == NO_INIT) {
field = initValue
}
return field
}
fun updateValue() {
value += expensive()
}
private fun expensive() = "hello"
}
这是最短和最好的方法吗?我认为自定义委托并不短,因为我需要一个实现。或者也许有图书馆代表?
使用示例:
val example = LazyUpdatableVarClass()
assertEquals("hello", example.value)
example.updateValue()
assertEquals("hellohello", example.value)
【问题讨论】:
标签: kotlin delegates lazy-initialization