rx-java - Kotlin通配符方法

标签 rx-java kotlin

我在使用 retryWhen 时遇到一些问题RxJava 中的函数。

当我创建一个要传递给 retryWhen 的函数时在 Observable ,我无法调用 zipWith功能。看来 Kotlin 正在期待一些无法在这里转换的东西。

在此示例中,it.zipWith不起作用(还有其他一些方法可用,但不是这个):

    val retryFunc = Func1<Observable<out Throwable>, Observable<Any>> {
        // zipWith is not possible to call
        it.zipWith<Int, Any>(Observable.range(1, 3), Func2<Throwable, Int, Any> { throwable, integer ->
            if (integer > 2) {
                return@Func2 Observable.error<Any>(Exception())
            }
            Observable.timer(1, TimeUnit.SECONDS)
        })
    }

    Observable.just("1", "2", "3").retryWhen(retryFunc)

如果我将传入参数改为 Func1<Observable<in Throwable> ...in关键字使得可以使用zipWith功能。但我改了之后,调用retryWhen(retryFunc)显示错误:

Type mismatch: Expecting out Throwable, found in Throwable

    val retryFunc = Func1<Observable<in Throwable>, Observable<Any>> {
        it.zipWith<Int, Any>(Observable.range(1, 3), Func2<Throwable, Int, Any> { throwable, integer ->
            if (integer > 2) {
                return@Func2 Observable.error<Any>(Exception())
            }
            Observable.timer(1, TimeUnit.SECONDS)
        })
    }

    Observable.just("1", "2", "3").retryWhen(retryFunc) // type mismatch here, expected out, found in

有谁知道我如何在 Kotlin 中接收和生成相同的类型?

能够创建zipWith并返回期望值?

最佳答案

找到解决方案:

it.cast(Throwable::class.java).zipWith

或者这个:

(observable as Observable<Throwable>).zipWith

类型转换Throwable解决了,希望Kotlin有别的办法(不依赖 Observable.cast 方法)。

关于rx-java - Kotlin通配符方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34538029/

相关文章:

observable - 使用 JavaRX 将文档插入 couchbase 时抛出 DocumentAlreadyExistsException 异常时如何继续处理下一个文档?

java - RxAndroid,结合多个网络调用

java - 房间数据库 RxJava 后台线程

Android ConnectException 错误 - EHOSTUNREACH(无路由到主机)错误

android - 无法使用 Dagger 2 运行 Kotlin

将 dagger 2.18 与 kotlin kapt 结合使用时,Android 构建失败

android - 如何在 Android RecyclerView - GridLayoutManager 中将列设置在行的中心

android - 如何将表示类对象的 RecyclerView 项与此类对象绑定(bind)? Kotlin

rx-java - RxJava2 : How to improve parallel data downloading and caching?

spring - 如何在 Kotlin 中使用 QueryDSL 并生成文件