[英]Calling a Kotlin higher-order function from Java
我有一個Kotlin助手類定義為:
class CountdownTimer(endDateInSeconds: Long, callback: (timeRemaining: RemainingTime) -> Unit)
顧名思義,它需要一個紀元時間和一個回調,以固定的時間間隔(在這種情況下為秒)調用,直到達到結束日期。 RemainingTime是一個數據類,包含到結束日期之前的時間量(秒,分鍾,小時等)。
我可以干凈利用Kotlin的這個課程:
countdownTimer = CountdownTimer(endDate, { timeRemaining ->
var timeString = // format time remaining into a string
view?.updateCountdownTimer(timeString)
})
但是當我從Java調用它時,我被迫在回調中提供一個不必要的返回值,即使匿名函數指定了Unit返回類型(理論上它相當於Java void返回類型):
this.countdownTimer = new CountdownTimer(this.endDate, remainingTime -> {
var timeString = // format time remaining into a string
if (view != null) {
view.updateCountdownTimer(timeString);
}
return null;
});
雖然從技術上講不是問題,但是從Java回調中提供無意義的返回值似乎是錯誤的。 有沒有更好的方式在Kotlin中表達這種回調?
Unit
是一個object
,並不直接等同於void
。 在后台甚至kotlin代碼將包括return Unit.INSTANCE;
在回調結束時。 除了定義一個總是返回void
的單獨接口之外,沒有辦法解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.