我遇到了以下代码:
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接口的一部分。
如何解决此问题?
答案 0 :(得分:1)
好像您缺少正确的local ip adress
导入。以下代码可在我的IDE中使用。
Function