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

时间:2018-10-01 09:03:20

标签: kotlin rx-java rx-java2

我正在尝试为Observable.subscribe编写一个扩展功能,该功能会自动记录错误。

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

ErrorConsumer可以正常工作并且可能会记录错误,但是subscribeAndLogE不像.subscribe()那样接受lambda。

observer.subscribe { 
                //works
           }

observer.subscribeAndLogE { 
                //does not work
           }

它说:

error

该OnboardingScreen通常为值T

我没有看到Consumer<in T>中原始的Observable在接受lambda方面做任何特殊的事情。我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

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

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

并像这样使用它:

observer.subscribeAndLogE { 
                //works
           }