gpt4 book ai didi

java - GWT AsyncDataProvider 的通用列表

转载 作者:行者123 更新时间:2023-11-29 09:02:48 24 4
gpt4 key购买 nike

我有一个 GWT 应用程序,我需要在其中处理多种相似但不完全相同的数据类型。我想使用由 AsyncDataProvider 支持的 CellList 来显示它们。我试图避免创建多个 CellLists/AsyncDataProvider,因此我试图以通用方式执行此操作。但是,我似乎不知道该怎么做。

我试过:

private AsyncDataProvider<MyInterface> myDataProvider = new AsyncDataProvider<MyInterface>() {
@Override
protected void onRangeChanged(final HasData<MyInterface> display) {

AsyncCallback<Type> callback = new AsyncCallback<Type>() {
@Override
public void onFailure(Throwable t) {
myDataProvider.updateRowData(0, new ArrayList<MyImplementation>());
}
@Override
public void onSuccess(Type result) {
//some success logic
}
};
}

这是行不通的,因为 MyImplementation 的集合不能替代 MyInterface 的集合。

我也试过:

private AsyncDataProvider<? extends MyInterface> myDataProvider = new AsyncDataProvider<MyInterface>() {
@Override
protected void onRangeChanged(final HasData<MyInterface> display) {

AsyncCallback<Type> callback = new AsyncCallback<Type>() {
@Override
public void onFailure(Throwable t) {
myDataProvider.updateRowData(0, new ArrayList<MyImplementation>());
}
@Override
public void onSuccess(Type result) {
//some success logic
}
};
}

但我收到错误:"The method updateRowData(int, List<capture#2-of ? extends MyInterface>) in the type AsyncDataProvider<capture#2-of ? extends MyInterface> is not applicable for the arguments (int, ArrayList<MyImplementation>)"

有什么想法吗?是否有可能做我想做的事。有替代方法,例如手动将它们全部转换为通用类型,但这似乎是一个以通用方式处理事物的好用例。

最佳答案

试试这个,创建一个通用回调,它接受一个数据提供者并根据您的逻辑更新它

public class HelloCallBack<T> implements AsyncCallback<T> {

private HelloDataProvider<T> dataProvider;

@Override
public void onFailure(final Throwable caught) {

dataProvider.updateRowData(0, new ArrayList<T>());

}

@Override
public void onSuccess(final T result) {
// TODO Auto-generated method stub

}

public HelloDataProvider<T> getDataProvider() {
return dataProvider;
}

public void setDataProvider(final HelloDataProvider<T> dataProvider) {
this.dataProvider = dataProvider;
}

}

现在创建一个通用的数据提供者

public class HelloDataProvider<T> extends AsyncDataProvider<T> {

@Override
protected void onRangeChanged(final HasData<T> display) {

final HelloCallBack<T> callBack = new HelloCallBack<T>();
callBack.setDataProvider(this);

}

}

现在,在任何必须使用提供者的地方,用具体类型实例化它。

new HelloDataProvider<YourImplementation>();

希望对你有帮助

关于java - GWT AsyncDataProvider 的通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16403948/

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