简体   繁体   English

如何在Kotlin中实现java SAM接口?

[英]how to implements a java SAM interface in Kotlin?

In Java it is possible to write code like this: 在Java中,可以编写如下代码:

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: 但是,尝试覆盖Kotlin中的本地函数会导致: 在此输入图像描述


Question: is it possible to override local function in Kotlin? 问题:是否可以覆盖Kotlin中的本地功能?

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: 如果 Observer是一个java SAM接口( 目前不支持kotlin SAM接口 ),那么你可以使用lambda表达式代替:

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

OR using a lambda expression instead, for example: 或者使用lambda表达式,例如:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM