gpt4 book ai didi

java - 在java中传递通配符泛型数据类型的泛型

转载 作者:行者123 更新时间:2023-12-01 16:50:27 26 4
gpt4 key购买 nike

我有这样的类(class):

public interface DataAccessor<E extends Model, U>

public class Data<T> implements DataMenuItemObservable<T> {

这个界面:

interface Listener<T> {
void onResponse(T value);
}

这个方法:

public interface DataAccessor<E extends Model, U> extends DataMenuItemObservable<E> {

...

public DataAccessor<? extends Model, ?> getPrimaryDataAccessor()

void get(int index, Context context, Listener<Data<E>> listener, ErrorListener errorListener);

...

}

并在这段代码上得到编译器错误:

DataAccessor<? extends Model, ?> accessor = db.getPrimaryDataAccessor();
accessor.get(0, this, new DataAccessor.Listener<Data<? extends Model>>() {
@Override
public void onResponse(Data<? extends Model> value) {
}
}, this);

想法说incompatible types: <anonimous Listener<Data<? extends Model>>> cannot be converted to Listener<Data<CAP#1>>

我还尝试使用 this 实现接口(interface)但同样的错误。

如何修复错误?有一些可接受的解决方法吗?

最佳答案

它不起作用的原因是编译器不知道两个通配符(? extends Model)实际上是否引用相同的类型。您可以通过创建一个辅助方法来捕获类型来解决此问题:

private <E extends Model> void get(DataAccessor<E, ?> accessor);
accessor.get(0, this, new DataAccessor.Listener<Data<E>>() {
@Override
public void onResponse(Data<E> value) {
//...
}
}, this);
}

现在调用助手:

DataAccessor<? extends Model, ?> accessor = db.getPrimaryDataAccessor();
get(accessor);

关于java - 在java中传递通配符泛型数据类型的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41173424/

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