5

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?

holi-java
  • 29,655
  • 7
  • 72
  • 83
0leg
  • 13,464
  • 16
  • 70
  • 94

1 Answers1

11

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);
};
Dave Thomas
  • 3,667
  • 2
  • 33
  • 41
holi-java
  • 29,655
  • 7
  • 72
  • 83