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