无法覆盖应用功能

时间:2019-06-06 06:45:29

标签: kotlin

我遇到了以下代码:

import io.reactivex.Observable
import io.reactivex.functions.BiFunction
import java.util.concurrent.TimeUnit

    class ExpBackoff(
      private val jitter: Jitter,
      private val delay: Long,
      private val unit: TimeUnit,
      private val retries: Int = 0
    ) : Function<Observable<out Throwable>, Observable<Long>> {

      @Throws(Exception::class)
      override fun apply(observable: Observable<out Throwable>): Observable<Long> {
        return observable
            .zipWith(Observable.range(1, retries), BiFunction<Throwable, Int, Int> { _, retryCount ->
              retryCount
            })
            .flatMap { attemptNumber -> Observable.timer(getNewInterval(attemptNumber), unit) }
      }

      private fun getNewInterval(retryCount: Int): Long {
        var newInterval = (delay * Math.pow(retryCount.toDouble(), 2.0) * jitter.get()).toLong()
        if (newInterval < 0) {
          newInterval = Long.MAX_VALUE
        }
        return newInterval
      }
    }

位于:

https://leandrofavarin.com/exponential-backoff-rxjava-operator-with-jitter

此代码无法编译。这行是错误的:

Function<Observable<out Throwable>, Observable<Long>>

函数仅接受一个参数。我真的很困惑。撰写本文的人清楚地表明,他编写了这段代码,我认为它是有效的,或者至少在他编写该代码时有效。但是我怀疑Kotlin是否更改了Function的界面。即使删除第二个参数,代码也不会编译,因为apply函数不能覆盖,因为这不是Function接口的一部分。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

好像您缺少正确的local ip adress导入。以下代码可在我的IDE中使用。

Function