如何在Kotlin中实现一个java SAM接口?
在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接口( 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); });