Kotlin 和 RxJava 类型推断失败

Kotlin and RxJava type inference failed

我正在尝试在发生超时时在我的 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()

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

Type inference failed: Not enough information to infer parameter R in

fun flatMap ( mapper: ((t: Throwable) → ObservableSource)! ) : Observable! Please specify it explicitly.

'if' 运算符相同:

Type inference for control flow expression failed. Please specify its type explicitly

对于运算符.just:

Type inference failed: Not enough information to infer parameter T in fun just ( item: T! ) : Observable! Please specify it explicitly.

对于运算符.empty:

Type inference failed: Not enough information to infer parameter T in

fun just ( item: T! ) : Observable! Please specify it explicitly.

对于 .error 运算符:

Type inference failed: Not enough information to infer parameter T in

fun error ( exception: Throwable! ) : Observable! Please specify it explicitly.

如何解决这个问题?

我的意思是,此代码也在 Java 中:

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

编译器无法判断你想要什么类型return。

针对您的情况,最简单的解决方法是添加您的 return 类型。像这样 Observable.just(Observable.empty<Any>())。现在编译器将能够找出 return.

的类型