显式类型参数Kotlin和RxJava
这是在Kotlin中使用RxJava与ThreadTransformer
compose
的唯一可能的方式吗? 我只是不喜欢compose
功能中的<MyType>
部分。 有没有可能省略它?
override fun call(): Observable<MyType> { return Observable.just(getData()) .compose(threadTransformer.applySchedulers<MyType>()) }
Observable.compose
是Java中缺少扩展功能的解决方法。 在Kotlin中不需要使用Observable.compose
,因为它支持开箱即用的扩展功能:
// default schedulers fun <T> Observable<T>.applySchedulers(): Observable<T> { return subscribeOn(Schedulers.computation()).observeOn(AndroidSchedulers.mainThread()) } // custom transformer fun <T> Observable<T>.applySchedulers(transformer: ThreadTransformer): Observable<T> { return compose(transformer.applySchedulers<T>()) } override fun call(): Observable<MyType> { return Observable.just(getData()).applySchedulers() }
根据弗拉基米尔Mironov的答案。 将其扩展到您的需求:
//Observable fun <T> Observable<T>.applyIoScheduler() = applyScheduler(Schedulers.io()) fun <T> Observable<T>.applyComputationScheduler() = applyScheduler(Schedulers.computation()) private fun <T> Observable<T>.applyScheduler(scheduler: Scheduler) = subscribeOn(scheduler).observeOn(AndroidSchedulers.mainThread()) //Single fun <T> Single<T>.applyIoScheduler() = applyScheduler(Schedulers.io()) fun <T> Single<T>.applyComputationScheduler() = applyScheduler(Schedulers.computation()) private fun <T> Single<T>.applyScheduler(scheduler: Scheduler) = subscribeOn(scheduler).observeOn(AndroidSchedulers.mainThread()) //Completable //..