Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rx java Kotlin通配符方法_Rx Java_Kotlin - Fatal编程技术网

Rx java Kotlin通配符方法

Rx java Kotlin通配符方法,rx-java,kotlin,Rx Java,Kotlin,我在RxJava中使用retryWhen函数时遇到一些问题 当我在一个可观察的中创建一个传递给retryWhen的函数时,我不能调用zipWith函数。科特林似乎期待着一些不能在这里施展的东西 在本例中,it.zipWith不起作用(其他一些方法可用,但本例中没有): 有人知道我如何在Kotlin接收和生产相同类型的产品吗 是否能够使用创建zipWith并返回预期值?找到解决方案: it.cast(Throwable::class.java).zipWith 或者这个: val retr

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

当我在一个可观察的
中创建一个传递给
retryWhen
的函数时,我不能调用
zipWith
函数。科特林似乎期待着一些不能在这里施展的东西

在本例中,
it.zipWith
不起作用(其他一些方法可用,但本例中没有):

有人知道我如何在Kotlin接收和生产相同类型的产品吗

是否能够使用
创建
zipWith并返回预期值?

找到解决方案:

it.cast(Throwable::class.java).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)
(可观察为可观察)。zipWith


使用
Throwable
进行铸造可以解决问题,我希望Kotlin有另一种方法(不依赖于
observeable.cast
方法).

使用
as
的第二种风格是铸造的惯用方法。您应该将retryFunc第一个参数定义为不变量:
observeable
作为zipWith作为
retryWhen
zipWith
在方差上不一致。See和@tommes甚至将IDE显示为协变(out-Throwable),这听起来像是一个错误。您确定已删除所有差异关键字吗?当您将类型标记为不变量时,哪些行会产生错误?此时,我将删除Func1类型声明,并让类型推断在lambda上解析类型。这个问题似乎很熟悉,这个问题是在其他地方出现的。这篇文章的作者活跃在#rx频道,如果他有任何进一步的信息,你可以在那里问他,然后在这里报告。我昨天发布了一篇没有回应的文章,但我想那是在普通频道。。。我会再试试RX,谢谢!
    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