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)