代码之家  ›  专栏  ›  技术社区  ›  K.Os

Kotlin和RxJava类型推断失败

  •  6
  • K.Os  · 技术社区  · 7 年前

    我试图在我的Observable上实现retryWhen,当出现timeot时,但我在IDE Android Studio 3.0中有一些奇怪的错误

    代码如下:

    rxRssiRepository.onRssiUpdate() //returns Observable<RssiEvent>
            .timeout(10, TimeUnit.MILLISECONDS)
            .retryWhen { t: Observable<Throwable> ->
                t.flatMap { error: Throwable ->
                    if (error is TimeoutException) {
                        stopLocationUpdates()
                        Log.v("TIMEOUT", "TIMEOUT RSSI EVENTS")
                        Observable.just(Observable.empty())
                    } else {
                        Observable.error(error)
                    }
                }
            }
            .concatMap { t: RssiEvent ->
                appendRssiEvent(t)
            }
            .publish()
    

    IDE在红色上加下划线。flatMap运算符并表示:

    类型推断失败:没有足够的信息来推断中的参数R

    趣味平面图 ( 映射器:((t:Throwable)observesource)! :可见! 请明确说明。

    “if”运算符相同:

    控制流表达式的类型推断失败。请明确指定其类型

    对于操作员。只是:

    类型推断失败:没有足够的信息来推断中的参数T 有趣只是 ( 项目:T! ) :可见! 请明确说明。

    对于操作员。空:

    类型推断失败:没有足够的信息来推断中的参数T

    有趣只是 ( 项目:T! ) :可见! 请明确说明。

    对于。错误运算符:

    类型推断失败:没有足够的信息来推断中的参数T

    有趣的错误 ( 例外:可丢弃! ) :可见! 请明确说明。

    如何修复此问题?

    我的意思是,Java中也有这段代码: How to add a timeout to detect that an Observable didn't emit for a while

    但是,当我将其转换为类似于Kotlin时,它给了我所描述的情况问题

    1 回复  |  直到 7 年前
        1
  •  9
  •   jbarat    7 年前

    编译器无法确定要返回的类型。

    在您的情况下,最简单的修复方法是添加一个类型作为返回类型。像这样的 Observable.just(Observable.empty<Any>()) . 现在,编译器将能够找出要返回的类型。