从Java调用Kotlin高阶函数
我有一个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调用这个函数时,即使匿名函数指定了一个单元返回类型(理论上它相当于一个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
的独立接口,没有办法。