Функция расширения Kotlin на Observable <T>.subscribe не работает - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь написать функцию расширения для Observable.subscribe, которая автоматически регистрирует ошибки.

fun <T> Observable<T>.subscribeAndLogE(onNext: Consumer<in T>): Disposable =
    subscribe(onNext, ErrorConsumer())

ErrorConsumer работает и, вероятно, регистрирует ошибку, но subscribeAndLogE не принимает лямбда-выражения, такие как .subscribe() делает.

observer.subscribe { 
                //works
           }

observer.subscribeAndLogE { 
                //does not work
           }

В нем говорится:

error

При этом OnboardingScreen будет любым значением, равным T.1017 *

Я не вижу, чтобы оригинал Consumer<in T> в Observable делал что-то особенное, чтобы принимать лямбды.Что я здесь не так делаю?

1 Ответ

0 голосов
/ 01 октября 2018

Вы передаете параметр типа Consumer в функцию.Вам нужно передать функцию, чтобы лямбда-синтаксис работал.Это будет работать так, как вы хотите:

fun <T> Observable<T>.subscribeAndLogE(onNext: (it : T) -> Unit): Disposable =
        subscribe({ onNext(it) },{ throwable -> Log(throwable) })

и использовать его так:

observer.subscribeAndLogE { 
                //works
           }
...