gpt4 book ai didi

java - 需要不兼容的类型

转载 作者:行者123 更新时间:2023-12-02 11:58:49 25 4
gpt4 key购买 nike

我有该代码(不是我的):

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

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

我必须输入/返回什么才能满足 lambda 函数?

最佳答案

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

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

list1.addAll(list2);

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

这里您需要做的是使用类型参数将 ? 绑定(bind)到相同的类型。实际上代表相同的类型(或者一个可能是另一个的父类(super class)型或子类型:

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
}

在这里,我假设其 Intent 是针对所有 ?与现在由类型参数 T 表示的类型相同。但事实可能并非如此。如果是的话,请告诉我以及失败的原因,我们可以找到更准确的答案。

关于java - 需要不兼容的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47405533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com