gpt4 book ai didi

rx-java - Kotlin 和 RxJava - 为什么我的 Single.zip() 没有编译?

转载 作者:IT老高 更新时间:2023-10-28 13:28:53 25 4
gpt4 key购买 nike

我在这里有点疯了。我正在尝试创建一个 Observable<BigDecimal>扩展函数(针对 RxJava 2.x)来发出平均排放量,但我遇到了 Single.zip() 的编译错误功能。有人知道我做错了什么吗?我也试图对我所有的类型都明确表示,但这没有用......

import io.reactivex.Observable
import io.reactivex.Single
import java.math.BigDecimal


fun Observable<BigDecimal>.sum() = reduce { total, next -> total + next }

//compile error
fun Observable<BigDecimal>.average() = publish().autoConnect(2).let {
Single.zip(it.sum().toSingle(), it.count()) {
sum, count -> sum / BigDecimal.valueOf(count)
}
}

enter image description here

最佳答案

类型推断大多不适用于 rxJava2。这实际上不是类型推断问题。 Kotlin 通常会生成将 SAM 替换为 kotlin 函数类型的扩展方法,但由于某种原因,此技术不适用于被覆盖的方法。

更多细节在这里https://youtrack.jetbrains.com/issue/KT-13609

作为一种选择,您可以尝试为 lambda 参数指定类型

fun Observable<BigDecimal>.average() = publish().autoConnect(2).let {
Single.zip(it.sum().toSingle(), it.count(), BiFunction {
sum: BigDecimal, count: Long ->
sum / BigDecimal.valueOf(count)
})
}

关于rx-java - Kotlin 和 RxJava - 为什么我的 Single.zip() 没有编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42635968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com