簡體   English   中英

從Java調用Kotlin高階函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM