可观察到的转换为kotlin-问题

问题描述 投票:2回答:2

我已经将一些JAVA类转换为Kotlin,但在Android Studio中却出现了Type Mismatch Error问题。

我将在IDE中添加我的代码段以及消息的屏幕快照,以供参考。

JAVA CODE

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

enter image description here

java android kotlin rx-java2
2个回答
0
投票

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

尝试Observables.zip。不是Observable.zip


0
投票

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

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

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

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

        mLocalities = localities
        mSubLocalities = subLocalities

正在引入可能在将来很难跟踪错误的副作用

© www.soinside.com 2019 - 2024. All rights reserved.