1

在Java中,可以这样写代码:如何在Kotlin中实现一个java SAM接口?

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

但试图超越本地功能科特林结果: enter image description here


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

回答

6

请尝试使用对象表达式。

//  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); 
    } 
}); 

IFObserver是一个java SAM接口(科特林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); 
}); 
+0

完美的答案,这两种方法的作品。而且,是的,Observer是一个SAM界面。 – Oleg