Search code examples
androidfunctional-programmingkotlinfunctional-interface

how to implements a java SAM interface in Kotlin?


In Java it is possible to write code like this:

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

However trying to override local function in Kotlin results in: enter image description here


Question: is it possible to override local function in Kotlin?


Solution

  • try using object expression instead.

    //       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 the Observer is a java SAM interface (kotlin SAM interfaces aren't currently supported) then you can using lambda expression instead as further:

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

    OR using a lambda expression instead, for example:

    // specify the lambda parameter type ---v
    model.getObservableProduct().observe<ProductEntity>(this) {
          model.setProduct(it);
    };