2016-04-12 5 views
3

Ist dies die einzige Möglichkeit, RxJavas compose mit ThreadTransformer in Kotlin zu verwenden? Ich mag einfach nicht die <MyType> Teil in compose Funktion. Ist es möglich, es wegzulassen?Expliziter Typ Argument Kotlin und RxJava

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

Antwort

14

Observable.compose ist eine Abhilfe für den Mangel an Erweiterungsfunktionen in Java. Es besteht keine Notwendigkeit Observable.compose in Kotlin zu verwenden, da es Erweiterungsfunktionen aus der Box unterstützt:

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

Basierend auf Vladimir Mironov Antwort. Erweitern Sie dies auf Ihre Bedürfnisse:

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