需要不兼容的类型

Incompatible types required

我有那个代码(不是我的):

private static class RxCallAdapterWrapper implements CallAdapter<Observable<?>> {
    private final CallAdapter<?> wrapped;
    @Override
    public <R> Observable<?> adapt(Call<R> call) {
        Observable<?> observableWrapped = (Observable<?>) wrapped.adapt(call);
        return observableWrapped.onErrorResumeNext(throwable -> {

            if (notHasNetworkConnection()) {
                return Observable.error(new NoConnectionException());// Here happens the error
            }

            return Observable.error(throwable);
        });
    }
.... Other code
}

当我尝试在 Android Studio 中编译时,出现以下错误:

Error:(56, 44) error: incompatible types: bad return type in lambda
expression Observable<CAP#1> cannot be converted to Observable<?
extends CAP#1> where CAP#1 is a fresh type-variable: CAP#1 extends
Object from capture of ? extends Object

环境: 作为 3.0.1
API(编译,目标):27.0.0
Java 兼容性:1.8
RXJava: 1.1.1
RxAndroid: 1.1.0

我必须 typecast/return 什么才能满足 lambda 函数?

请注意,? 的每次出现都可能是不同的类型。例如:

List<?> list1 = ...;
List<?> list2 = ...;

list1.addAll(list2);

将在 addAll 操作中失败,因为无论 list1 或 list2 的实际元素时间如何,该行都必须编译并且有 "infinite" 数量的组合不起作用(例如 List<String> list1 ... List<Double> list2).

你在这里需要做的是使用类型参数将那些 ? 实际代表相同类型(或者可能是另一个的超类或子类)的类型绑定到相同的类型:

private static class RxCallAdapterWrapper<T> implements CallAdapter<Observable<T>> {
    private final CallAdapter<T> wrapped;
    @Override
    public <R> Observable<T> adapt(Call<R> call) {
        Observable<T> observableWrapped = wrapped.adapt(call);
        return observableWrapped.onErrorResumeNext(throwable -> {

            if (notHasNetworkConnection()) {
                return Observable.error(new NoConnectionException());// Here happens the error
            }

            return Observable.error(throwable);
        });
    }
.... Other code
}

这里我假设所有 ? 都是同一类型,现在由类型参数 T 表示。然而,情况可能并非如此。如果是这样,请告诉我失败的原因,我们可以得出更准确的答案。