如何在 Kotlin 中实现 java SAM 接口?
how to implements a java SAM interface in Kotlin?
在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);
}
});
IF Observer
是一个 java SAM 接口(kotlin SAM 目前不支持接口) 那么你可以使用 lambda 表达式来代替:
model.getObservableProduct().observe(this, Observer<ProductEntity>{
model.setProduct(it);
});
OR 使用 lambda 表达式代替,例如:
// specify the lambda parameter type ---v
model.getObservableProduct().observe<ProductEntity>(this) {
model.setProduct(it);
};
在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);
}
});
IF Observer
是一个 java SAM 接口(kotlin SAM 目前不支持接口) 那么你可以使用 lambda 表达式来代替:
model.getObservableProduct().observe(this, Observer<ProductEntity>{
model.setProduct(it);
});
OR 使用 lambda 表达式代替,例如:
// specify the lambda parameter type ---v
model.getObservableProduct().observe<ProductEntity>(this) {
model.setProduct(it);
};