【问题标题】:Calling a Kotlin higher-order function from Java从 Java 调用 Kotlin 高阶函数
【发布时间】:2017-09-06 19:18:10
【问题描述】:

我有一个 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 中表达这个回调?

【问题讨论】:

    标签: java android kotlin


    【解决方案1】:

    Unit 是一个object,并不直接等同于void。在后台,即使是 kotlin 代码也会在回调结束时包含return Unit.INSTANCE;。除了定义一个始终返回 void 的单独接口之外,没有其他办法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多