You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

参数含lambda的Kotlin扩展函数在Java中无法调用如何解决?

问题根因

  • Kotlin 的()->Unit函数类型在Java层对应kotlin.jvm.functions.Function0<kotlin.Unit>,要求lambda返回Unit实例,而你当前传入的Java lambda无返回值,和目标方法签名不匹配,因此触发找不到方法的报错。
  • 你移除lambda参数后方法签名完全匹配,所以调用正常。

可行解决方案

方案1(无需修改Kotlin代码,改Java调用即可,兼容性最好)

在Java lambda的末尾显式返回Unit.INSTANCE即可匹配签名:

showWarningDialog(this,R.string.alert,R.string.leave_without_saving,() -> {
    setResult(RESULT_CANCELED);
    finish();
    return Unit.INSTANCE;
});

如果IDE提示找不到Unit类,补充导入import kotlin.Unit;即可。

方案2(修改Kotlin代码,适配Java调用习惯)

将Kotlin函数的lambda参数替换为Java友好的函数式接口,后续Java调用不需要额外返回值:

  1. 定义函数式接口
fun interface OnDialogDoneListener {
    fun onDone()
}
  1. 修改扩展函数定义
fun Activity.showWarningDialog(title: Int, description: Int, done: OnDialogDoneListener) {
    done.onDone()
}

修改后原有Java调用代码不需要改动即可正常运行。

内容的提问来源于stack exchange,提问作者Usama Saeed US

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:24:03