我们可以将java方法传递给类型()-> Unit的kotlin函数吗?

2022-09-02 19:41:07

我有一个如下的kotlin方法

 fun initDrawer(drawerView: DrawerView, drawerLayout: DrawerLayout, context: Context, onRefreshClick: ()  -> Unit) {
  }

但是当我尝试传递 initDrawer(drawerView,drawerlayout,this,onRefreshClick()) 时,它给了我一个错误,即必需的 () 不能应用于 (kotlin.单位)

是否可以将方法从 java 传递到 kotlin。


答案 1

您必须将 onRefreshClick 的返回值设置为 Unit:

private Unit onRefreshClick() {
    //do something here
    return Unit.INSTANCE;
}

然后你可以这样称呼它:

initDrawer(drawerView, drawerLayout, this, this::onRefreshClick);

答案 2

您不能直接从 Java 传递 Java 方法,因为 Kotlin 参数期望该方法返回 。Unit

您可以遵循以下模式:

kotlinClass.higherOrderFunction(() -> {functionToPass(); return Unit.INSTANCE;});

其中定义为:functionToPass()

private void functionToPass() {
    // do something
}

在您的情况下:

initDrawer(drawerView, drawerlayout, this, 
  () -> {onRefreshClick(); return Unit.INSTANCE;}) 

推荐