Kotlin和RxJavatypes推断失败

我试图执行重试当我的Observable时,会出现一个时间,但我有奇怪的错误下划线在IDE Android Studio 3.0

这里是代码:

rxRssiRepository.onRssiUpdate() //returns Observable .timeout(10, TimeUnit.MILLISECONDS) .retryWhen { t: Observable -> 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运算符的红色,并说:

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

fun flatMap(mapper:((t:Throwable)→ObservableSource)!):Observable! 请明确指定。

“if”运算符也是如此:

控制流expression式的types推断失败。 请明确指定其types

对于运营商.just:

types推断失败:没有足够的信息来推断参数T只是乐趣(item:T!):Observable! 请明确指定。

对于运算符.empty:

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

好玩(item:T!):可观察! 请明确指定。

对于错误操作符:

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

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

如何解决这个问题?

我的意思是,这个代码也在Java中: 如何添加一个超时来检测一个Observable没有发出一段时间

但是,当我把它转换成Kotlin,它给了我描述的情况问题

编译器无法弄清楚你想返回什么types。

在你的情况最简单的修复将是添加你的返回types的types。 像这样Observable.just(Observable.empty()) 。 现在编译器将能够找出返回的types。