我正在尝试编写一个自定义的委托,它可以清理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的类可以回到有单行变量声明的状态。
class Foo : BaseObservable() {
var bar by BaseObservableDelegate(BR.bar, this)
问题是,如果Foo类中没有@Bindable注解,BR中就不会为bar生成propertyId。 我不知道有什么其他注解或方法可以生成该属性的ID。
希望得到任何指导。