我试图编写一个自定义代理,可以在Kotlin类中简化数据绑定的语法。它会消除我可能想要观察的每个属性都需要定义自定义getter和setter的需要。
Kotlin中的标准实现似乎如下所示:
class Foo : BaseObservable() {
var bar: String
@Bindable get() = bar
set(value) {
bar = value
notifyPropertyChanged(BR.bar)
}
}
很明显,这个类有很多属性,可能会变得冗长。我希望的是将其抽象为一个委托,如下:
class BaseObservableDelegate(val id: Int, private val observable: BaseObservable) {
@Bindable
operator fun getValue(thisRef: Any, property: KProperty<*>): Any {
return thisRef
}
operator fun setValue(thisRef: Any, property: KProperty<*>, value: Any) {
observable.notifyPropertyChanged(id)
}
}
那么,继承自BaseObservable的类可以回归到单行变量声明:
Then, the class which extends BaseObservable could go back to having one-line variable declarations:
class Foo : BaseObservable() {
var bar by BaseObservableDelegate(BR.bar, this)
}
问题在于Foo类中没有@Bindable注解,因此bar的属性ID在BR中不会生成。 我不知道是否有其他注解或方法可以生成该属性ID。
希望能得到任何指导。