我有那个代码(不是我的代码):
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
当我尝试在Android Studio中编译时,出现以下错误:
menuBarButtons.add(new TextButton("File", 0, 0, 20, menuBarHeight, (() -> println("Test")) ));
环境:
AS 3.0.1
API(编译,目标):27.0.0
Java兼容性:1.8
RXJava:1.1.1
RxAndroid:1.1.0
我需要进行类型转换/返回以满足lambda函数吗?
答案 0 :(得分:1)
请注意,?
的每次出现都可能是不同的类型。例如:
List<?> list1 = ...;
List<?> list2 = ...;
list1.addAll(list2);
在addAll操作中会失败,因为无论list1或list2的实际元素时间如何,该行都必须编译,并且有一个“无限”数量的组合不起作用(例如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
表示。然而,情况可能并非如此。如果是,请告诉我什么是失败的,我们可以找到更准确的答案。