java Observable转换成kotlin问题
我已经将一些JAVA
类转换成了Kotlin
,但我在Android Studio中遇到了Type Mismatch Error
问题
我在IDE中添加了我的代码片段以及消息的屏幕截图,以供参考
JAVA代码
Disposable disposable = Observable.just(true)
.subscribeOn(Schedulers.io())
.flatMap((Function<Object, ObservableSource<?>>) o ->
Observable.zip(mModel.getSubLocalitiesFromStores(storeType, storeVerified),
mModel.getLocalitiesFromSubLocalities(),
(subLocalities, localities) -> {
mLocalities = localities;
mSubLocalities = subLocalities;
return true;
}
))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(res -> {
setUpLocalitySpinner(spinnerLocalities);
setUpSubLocalitySpinner(spinnerSubLocalities);
});
compositeDisposable.add(disposable);
KOTLIN代码
Observable.just(true)
.subscribeOn(Schedulers.io())
.flatMap({ o->
Observable.zip<ArrayList<SubLocality>, ArrayList<Locality>, Boolean>(mModel!!.getSubLocalitiesFromStores(storeType, storeVerified),
mModel!!.localitiesFromSubLocalities,
{ subLocalities, localities ->
mLocalities = localities
mSubLocalities = subLocalities
true
}
)
} as Function<Any, ObservableSource<*>>)
.observeOn(AndroidSchedulers.mainThread())
.subscribe { res ->
setUpLocalitySpinner(spinnerLocalities)
setUpSubLocalitySpinner(spinnerSubLocalities)
}
问题(IDE警告)
# 1 楼答案
你只有一个lambda函数,它可以是任何东西。有时,类型推断无法100%工作,因此您必须稍微帮助它
我现在没有IDE,但我认为添加类型应该足够了。比如:
作为旁注,请注意RxJava最酷的东西之一是函数式方法。如果你不想(例如,你调用
subscribe()
),那么什么都不会发生,所有的效果都被限制在可观察的流中。这些作业正在引入的副作用可能在未来很难追踪bug
# 2 楼答案
如果你想在kotlin中顺利使用
zip
,你应该在gradle中添加RxKotlin尝试观察。拉链不可见的。拉链