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.
的类型
我正在尝试在发生超时时在我的 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.