从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的独立接口,没有办法。