我有一个 GWT 应用程序,我需要在其中处理多种相似但不完全相同的数据类型。我想使用由 AsyncDataProvider 支持的 CellList 来显示它们。我试图避免创建多个 CellLists/AsyncDataProviders,所以我试图以一种通用的方式来做这件事。但是,我似乎无法弄清楚如何做到这一点。
我试过了:
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>)"
有任何想法吗?有没有可能做我想做的事情。还有其他选择,例如手动将它们全部转换为通用类型,但这似乎是一个以通用方式处理事物的好用例。