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

ave*_*raj 7 java android kotlin

我有一个像下面的kotlin方法

 fun initDrawer(drawerView: DrawerView, drawerLayout: DrawerLayout, context: Context, onRefreshClick: ()  -> Unit) {
  }
Run Code Online (Sandbox Code Playgroud)

但是当我尝试传递initDrawer(drawerView,drawerlayout,this,onRefreshClick())时,它给了我一个错误的required()无法应用于(kotlin.Unit)

是否可以将方法从java传递给kotlin.

Dmi*_*try 14

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

private Unit onRefreshClick() {
    //do something here
    return Unit.INSTANCE;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样调用它:

initDrawer(drawerView, drawerLayout, this, this::onRefreshClick);
Run Code Online (Sandbox Code Playgroud)


DVa*_*rga 7

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

您可以遵循以下模式:

kotlinClass.higherOrderFunction(() -> {functionToPass(); return Unit.INSTANCE;});
Run Code Online (Sandbox Code Playgroud)

其中functionToPass()定义为:

private void functionToPass() {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

initDrawer(drawerView, drawerlayout, this, 
  () -> {onRefreshClick(); return Unit.INSTANCE;}) 
Run Code Online (Sandbox Code Playgroud)