如何在Kotlin中实现Java的SAM接口?

5
在Java中,可以编写以下代码:
model.getObservableProduct().observe(this, new Observer<ProductEntity>() {
    @Override
    public void onChanged(@Nullable ProductEntity productEntity) {
        model.setProduct(productEntity);
    }
});

然而,在Kotlin中试图覆盖本地函数会导致以下结果:

enter image description here

问题:是否可以在Kotlin中覆盖本地函数?

1个回答

11

尝试使用对象表达式代替。

//       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接口(kotlin的SAM接口目前不支持),那么你可以使用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);
};

完美答案,两种方法都可行。而且,是的,Observer 是一个 SAM 接口。 - 0leg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接