当前位置: 首页 > 知识库问答 >
问题:

无法从Java访问Kotlin扩展函数,因为它的参数为lambda

印成天
2023-03-14

静态编程语言全局函数:

fun Activity.showWarningDialog(title: Int, description: Int,done:()->Unit) {  
   done()
}

用java调用此函数:

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

它会给出以下错误:无法解析方法'show WarningDialog(com.us.stickermaker.backgroundRemover.#####################################################################################################

该函数被导入到活动文件中,如果删除lambda参数,则可以正常工作。

共有2个答案

楚宏胜
2023-03-14

而不是lambda尝试使用“有趣的界面”。例如:

fun interface OnWarningDoneListener {
    fun onWarningDone()
}

fun Activity.showWarningDialog(title: Int, description: Int, onWarningDoneListener: OnWarningDoneListener) {  
   onWarningDoneListener.onWarningDone()
}
谢叶五
2023-03-14

静态编程语言中lambda的类型是()-

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

应该管用。静态编程语言编译器为您插入返回Unit,但Java不会以任何方式特别对待Unit

如果您只想在一个或几个地方从Java调用函数,这就足够了;否则,从Java方便调用的方法是fun接口,如Andrii Hridin的回答所示。

 类似资料:
  • 我在Kotlin文件中定义了扩展函数。 其中是(生成的)java类。现在,我想用正常的java代码访问它: 然而,那是行不通的。IDE将无法识别方法,编译失败。

  • 我想在使用Kotlin扩展函数时访问Java的私有字段。 假设我有一个Java类。ABC只有一个私有字段。我想用静态编程语言编写一个扩展函数,无论出于什么原因使用该字段。 Kotlin的功能是: 我得到的错误是: 无法访问“mPrivateField”:它在“ABC”中是专用的 有没有办法绕过这个限制?

  • 问题内容: 是否可以从Java代码访问扩展功能? 我在Kotlin文件中定义了扩展功能。 (生成的)java类在哪里。现在,我想用普通的Java代码访问它: 但是,这不起作用。 IDE无法识别该方法,并且编译失败。 起作用的是与kotlin的静态函数一起使用: 通过使用我的IDE似乎已正确配置。 我从kotlin文档中搜索了整个Java互操作文件,并且在谷歌上搜索了很多,但是找不到。 我究竟做错了

  • 我在Kotlin编程,我有日期类的扩展功能。 它在< code>onCreate中工作正常,但是在< code >异步任务中的< code>doInBackground中出现错误 我里面有这些线 < code > getCurrentDateTime()返回< code>Date类的实例,并且为< code>toString()中的参数给出了错误 也可以参数为公共开放的乐趣toString():字

  • 在一个同时使用静态编程语言和java的Android项目中,我想在一些java文件中使用静态编程语言函数和。 所以我想到了使用扩展。我做了下面的工作, 然而,我曾考虑将分隔符作为参数传递,但在java中尝试使用“删除第二个参数…”时,它给了我一个错误 方法正确吗?能做到吗?

  • 我正在尝试使用具体化类型的函数作为扩展函数,但我认为这是不可能的,因为在我检查生成的字节码后,我发现方法签名是私有的,有什么办法可以将其公开? CommonExtensions.kt 静态编程语言字节码: 客户代码: 静态编程语言文件 Java档案