可观察的转换成科特林-问题

时间:2020-01-31 07:24:57

标签: java android kotlin rx-java2

我已经将一些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);

科林码

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警告)

enter image description here

2 个答案:

答案 0 :(得分:1)

您只有一个lambda函数,可以是任何东西。有时,类型推断不能100%起作用,因此您必须稍微加以帮助

我现在没有IDE,但是我说添加类型就足够了。像这样:

Observable.zip<...>(...,
    BiFunction { subLocalities, localities ->
        mLocalities = localities
        mSubLocalities = subLocalities
        true
    }
)

请注意,请注意,RxJava的一项很酷的功能是功能方法。如果您不愿意(即调用subscribe()),则什么也不会发生,并且所有效果都限制在Observable流中。这些作业

        mLocalities = localities
        mSubLocalities = subLocalities

引入了副作用,将来可能很难跟踪错误

答案 1 :(得分:0)

如果您想在kotlin上平稳使用zip,则应在gradle上添加RxKotlin

尝试Observables.zip。不是Observable.zip