2016-04-12 3 views
3

Это единственный возможный способ использования RxJava compose с ThreadTransformer в Котлине? Мне просто не нравится номер <MyType> в функции compose. Можно ли это опустить?Явный тип аргумента Kotlin и RxJava

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

ответ

14

Observable.compose обходной путь из-за отсутствия функций расширения в Java. Там нет необходимости использовать 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() 
} 
0

На основании ответа Владимира Миронова. Расширьте это до ваших потребностей:

//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 
//.. 
Смежные вопросы