Kotlin 通过委托简化属性getter
我有许多属性遵循此模式,基本上,与下面的模板相比,只有以下内容发生了更改:Kotlin 通过委托简化属性getter,kotlin,Kotlin,我有许多属性遵循此模式,基本上,与下面的模板相比,只有以下内容发生了更改: 初始化的值 属性名 代码 问题 是否有任何方法可以使用委派来简化(减少)代码?当然可以 private fun <T> publishingDelegate(value: T): ReadWriteProperty<Any?, T> = object: ReadWriteProperty<Any?, T> { private var initValue = value
private fun <T> publishingDelegate(value: T): ReadWriteProperty<Any?, T> = object: ReadWriteProperty<Any?, T> {
private var initValue = value
override fun getValue(thisRef: Any?, property: KProperty<*>): T {
update()
return initValue
}
override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
update()
initValue = value
}
}
var foo: Double by publishingDelegate(0.0)
var foo2: Double by publishingDelegate(1.23)
private fun publishingDelegate(值:T):ReadWriteProperty=对象:ReadWriteProperty{
私有变量initValue=value
重写fun getValue(thisRef:Any?,属性:KProperty):T{
更新()
返回初始值
}
覆盖乐趣设置值(thisRef:Any?,属性:KProperty,值:T){
更新()
initValue=value
}
}
变量foo:publishingDelegate加倍(0.0)
var foo2:publishingDelegate加倍(1.23)
@ycomp哦,好的。我已经更新了可变属性的答案
private fun <T> publishingDelegate(value: T): ReadWriteProperty<Any?, T> = object: ReadWriteProperty<Any?, T> {
private var initValue = value
override fun getValue(thisRef: Any?, property: KProperty<*>): T {
update()
return initValue
}
override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
update()
initValue = value
}
}
var foo: Double by publishingDelegate(0.0)
var foo2: Double by publishingDelegate(1.23)