在Java中,可以这样编写代码:
model.getObservableProduct().observe(this, new Observer<ProductEntity>() {
@Override
public void onChanged(@Nullable ProductEntity productEntity) {
model.setProduct(productEntity);
}
});
但是,尝试覆盖Kotlin中的局部函数会导致:
问题:是否可以覆盖Kotlin中的本地功能?
最佳答案
尝试改为使用对象表达式。
// the parentheses must be removed if Observer is an interface ---V
model.getObservableProduct().observe(this, object:Observer<ProductEntity>(){
override fun onChanged(productEntity:ProductEntity?) {
model.setProduct(productEntity);
}
});
如果是
Observer
是java SAM 接口(interface)(当前不支持kotlin SAM 接口(interface)),则可以进一步使用lambda表达式:model.getObservableProduct().observe(this, Observer<ProductEntity>{
model.setProduct(it);
});
或使用lambda表达式代替,例如:
// specify the lambda parameter type ---v
model.getObservableProduct().observe<ProductEntity>(this) {
model.setProduct(it);
};