在Java中,可以这样编写代码:

model.getObservableProduct().observe(this, new Observer<ProductEntity>() {
    @Override
    public void onChanged(@Nullable ProductEntity productEntity) {
        model.setProduct(productEntity);
    }
});

但是,尝试覆盖Kotlin中的局部函数会导致:
android - 如何在Kotlin中实现Java SAM接口(interface)?-LMLPHP

问题:是否可以覆盖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);
};

09-20 08:29