从Java调用Kotlin高阶函数
我有一个Kotlin助手类,定义为:从Java调用Kotlin高阶函数,java,android,kotlin,Java,Android,Kotlin,我有一个Kotlin助手类,定义为: class CountdownTimer(endDateInSeconds: Long, callback: (timeRemaining: RemainingTime) -> Unit) 顾名思义,需要一个划时代时间和回调,以固定的间隔(在本例中为秒)调用,直到到达结束日期。RemainingTime是一个数据类,包含到结束日期的时间量(秒、分钟、小时等) 我可以从Kotlin干净地使用这个类: countdownTimer = C
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调用这个函数时,我不得不在回调中提供不必要的返回值,即使匿名函数指定了一个单元返回类型(理论上它相当于Java void返回类型):
虽然从技术上讲这不是一个问题,但不得不从Java回调中提供一个无意义的返回值似乎是。。错。有没有更好的方法在Kotlin中表达这个回调
单元
是一个对象
,并不直接等同于无效
。在后台,甚至kotlin代码也将包括return Unit.INSTANCE代码>位于回调的末尾。除了定义一个总是返回void
的单独接口之外,没有其他方法可以解决这个问题
this.countdownTimer = new CountdownTimer(this.endDate, remainingTime -> {
var timeString = // format time remaining into a string
if (view != null) {
view.updateCountdownTimer(timeString);
}
return null;
});