【问题标题】:Explicit Type Argument Kotlin and RxJava显式类型参数 Kotlin 和 RxJava
【发布时间】:2017-10-24 15:23:50
【问题描述】:

这是在 Kotlin 中使用 RxJava 的 composeThreadTransformer 的唯一可能方式吗?我只是不喜欢compose 函数中的<MyType> 部分。可以省略吗?

  override fun call(): Observable<MyType> {
    return Observable.just(getData())
        .compose(threadTransformer.applySchedulers<MyType>())
  }

【问题讨论】:

    标签: rx-java kotlin


    【解决方案1】:

    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()
    }
    

    【讨论】:

      【解决方案2】:

      基于弗拉基米尔·米罗诺夫的回答。将此扩展到您的需求:

      //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
      //..
      

      【讨论】:

        猜你喜欢
        • 2018-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多