Kotlin全域函式:
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();。
});
它給出了以下錯誤。 無法解決方法'showWarningDialog(com.us.stickermaker.backgroundRemover.CutOutActivity, int, int, <lambda expression>)'
該函式被匯入到活動檔案中,如果我們去掉lambda引數,則作業正常。
uj5u.com熱心網友回復:
你的lambda在Kotlin中的型別是 應該可以了。Kotlin編譯器為你插入了回傳的 如果你只是想在一個或幾個地方從Java中呼叫該函式,這可能就足夠了;否則,讓它方便地從Java中呼叫的方法是 uj5u.com熱心網友回復: 代替lambda嘗試使用 "fun interface"。例如:
標籤:()->Unit,Java將其視為kotlin.Function0<kotlin.Unit>/code>。所以你的Java lambda需要回傳Unit,而不是像現在這樣回傳void。
showWarningDialog(this, R.string.alert, R.string.leave_without_saving, () -> {
setResult(RESULT_CANCELED)。
finish()。
return Unit.INSTANCE。
});
Unit,但是Java并沒有以任何方式特別對待Unit。
fun interface,如Andrii Hridin的回答中所示。
fun interface OnWarningDoneListener {
fun onWarningDone()
}
fun Activity.showWarningDialog(title: Int, description: Int, onWarningDoneListener: OnWarningDoneListener) {
onWarningDoneListener.onWarningDone()
}
