当传递的泛型扩展某些东西时,RxJava中compose和ObservableTransformer的奇怪行为

当试图在RxJava2中进行组合时,我发现了一些我不能解释的东西。

假设我们有以下两个静态方法:

object RxUtils { fun <T> handleResponse(): ObservableTransformer<T, T> { return ObservableTransformer { observable -> observable.flatMap { t -> ObservableFromCallable.fromCallable(object: Callable<T>{ override fun call(): T { return t } }) } } } fun <T: GenericResponse> handleResponse2(): ObservableTransformer<T, T> { return ObservableTransformer { observable -> observable.flatMap { t -> ObservableFromCallable.fromCallable(object: Callable<T>{ override fun call(): T { return t } }) } } }} 

handleResponse和handleResponse2是一样的,不同的是在handleResponse2中T扩展了GenericResponse。

问题是,当我使用handleResponse2撰写时,来自撰写的对象不是一个Observable,我不能使用任何Observable运算符。

例:

 fun <T: GenericResponse> loadApi2(observable: Observable<T>): Observable<T> { return observable .compose(RxUtils.handleResponse2()) // here is blocked, can't use any other operator } fun <T: GenericResponse> loadApi(observable: Observable<T>): Observable<T> { return observable .compose(RxUtils.handleResponse()) //works fine, I can use other operators such as compose, subscribeOn etc }