Observable<T>.subscribe 上的 Kotlin 扩展功能不起作用

Jac*_*s.S 5 kotlin rx-java rx-java2

我正在尝试为 Observable.subscribe 编写一个自动记录错误的扩展函数。

fun <T> Observable<T>.subscribeAndLogE(onNext: Consumer<in T>): Disposable =
    subscribe(onNext, ErrorConsumer())
Run Code Online (Sandbox Code Playgroud)

ErrorConsumer 工作并可能记录错误,但subscribeAndLogE不像那样接受 lambdas .subscribe()。

observer.subscribe { 
                //works
           }

observer.subscribeAndLogE { 
                //does not work
           }
Run Code Online (Sandbox Code Playgroud)

它说:

错误

该 OnboardingScreen 是T通常的值。

我看不出原来Consumer<in T>在Observable做什么特别的接受lambda表达式。我在这里做错了什么?

Bal*_*l0r 5

您正在将类型参数传递Consumer给函数。您需要传递一个函数才能使 lambda 语法起作用。这将按照您想要的方式工作:

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

并像这样使用它:

observer.subscribeAndLogE { 
                //works
           }
Run Code Online (Sandbox Code Playgroud)