1

このようなコードを記述することが可能である: enter image description hereKotlinでJava SAMインターフェイスを実装する方法は? Javaでは


質問:は、それがローカル上書きすることが可能である

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

は、しかしで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); 
    } 
}); 

Observerは、java SAMインターフェース(kotlin SAMインターフェースは今をサポートしていない)、あなたがさらにとして代わりにラムダ式を使用することができている場合:

model.getObservableProduct().observe(this, Observer<ProductEntity>{ 
     model.setProduct(it); 
}); 

代わりにラムダ式を使用する

など、 または
// specify the lambda parameter type ---v 
model.getObservableProduct().observe<ProductEntity>(this){ 
     model.setProduct(it); 
}); 
+0

完璧な答えです。両方の方法が機能します。そして、はい、ObserverはSAMインターフェイスです。 – Oleg

関連する問題