Kotlin和RxJava类型推断失败

K.O*_*.Os 4 type-inference kotlin rx-java rx-java2

我正在尝试在发生计时器的情况下在Observable上实现retryWhen,但是在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()
Run Code Online (Sandbox Code Playgroud)

IDE在.flatMap运算符上用红色下划线表示:

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

有趣的flatMap(mapper:(((t:Throwable)?ObservableSource)!):可观察!请明确指定。

与“ if”运算符相同:

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

对于操作员.just:

类型推断失败:没有足够的信息来有趣地推断参数T(项目:T!):可观察!请明确指定。

对于运算符.empty:

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

有趣(项目:T!):可观察!请明确指定。

对于.error运算符:

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

有趣的错误(异常:Throwable!):可观察!请明确指定。

如何解决这个问题?

我的意思是,这段代码也位于Java中: 如何添加超时以检测Observable一段时间未发出

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

小智 7

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

在这种情况下,最简单的解决方法是在返回类型中添加一个类型。像这样的东西Observable.just(Observable.empty<Any>())。现在,编译器将能够找出要返回的类型。