我有一个GWT应用程序,我需要使用类似但不完全相同的多种数据类型。我想使用由AsyncDataProvider支持的CellList来显示它们。我试图避免创建多个CellLists/AsyncDataProviders,所以我试图以通用的方式做到这一点。但是,我似乎无法弄清楚如何做到这一点。GWT的通用列表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>)"
任何想法?是否有可能做我想做的事情。还有其他选择,例如手动将它们全部转换为常见类型,但它似乎是以通用方式处理事件的一个很好的用例。
感谢您的答复。我希望能够实现的是使用一个AsyncDataProvider,并根据用户选择的选项更改使用哪种回调。据我了解,您的解决方案将需要多个数据提供者实现,所以我需要切换当前连接到CellList的哪一个。而且,每个回调都需要一些定制逻辑。 – praetorian1 2013-05-07 07:41:12
它不需要多个数据提供者“实现”,您只需要编写这两个类,它只需要多个数据提供者实例(与创建新列表或列表没有什么不同)。还要更改每种类型的逻辑,您可以创建多种类型的回调或检查(结果isInstanceOf YourImplementation)并相应地进行处理。 –
skywalker
2013-05-07 08:38:22