通过委托来简化属性获取器

我有很多属性遵循这个模式,基本上只有从下面的模板变化的东西是:

  1. 初始化的值
  2. 属性名称

var foo: Double = 0.0 get() { update() return field } var foo2: Double = 1.23 get() { update() return field } 

有什么办法可以使用委托来简化(减少代码的冗长)吗?

当然

 private fun  publishingDelegate(value: T): ReadWriteProperty = object: ReadWriteProperty { 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)