需要不兼容的类型
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
表示。然而,情况可能并非如此。如果是这样,请告诉我失败的原因,我们可以得出更准确的答案。
我有那个代码(不是我的):
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
表示。然而,情况可能并非如此。如果是这样,请告诉我失败的原因,我们可以得出更准确的答案。