静态编程语言全局函数:
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参数,则可以正常工作。
而不是lambda尝试使用“有趣的界面”。例如:
fun interface OnWarningDoneListener {
fun onWarningDone()
}
fun Activity.showWarningDialog(title: Int, description: Int, onWarningDoneListener: OnWarningDoneListener) {
onWarningDoneListener.onWarningDone()
}
静态编程语言中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档案