Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT和泛型_Java_Gwt_Generics - Fatal编程技术网

Java GWT和泛型

Java GWT和泛型,java,gwt,generics,Java,Gwt,Generics,使用RPC和Java泛型发送对象列表时出现SerializationException错误 我正在创建此小部件以显示错误: public class Test<T> { ListDataProvider<T> ldp = new ListDataProvider<T>(); public void setItems(List<T> list){ for(T t :list){ ldp.ge

使用RPC和Java泛型发送对象列表时出现SerializationException错误

我正在创建此小部件以显示错误:

public class Test<T> {

    ListDataProvider<T> ldp = new ListDataProvider<T>();

    public void setItems(List<T> list){
        for(T t :list){
            ldp.getList().add(t);
        }
    }

    public List<T> getItems(){
        return ldp.getList();

    }

}
下一个很好:

service.sendList(list, new AsyncCallback...);
-----编辑----

我发现编写下一个代码也很有效

List<ExporterFormKey> newList = new ArrayList<ExporterFormKey>();
newList.add(test.getItems().get(0));
service.sendList(newList , new AsyncCallback...);
List<ExporterFormKey> newList = new ArrayList<ExporterFormKey>(test.getItems());
List newList=newarraylist();
添加(test.getItems().get(0));
sendList(newList,newasyncCallback…);
或者这也行

List<ExporterFormKey> newList = new ArrayList<ExporterFormKey>();
newList.add(test.getItems().get(0));
service.sendList(newList , new AsyncCallback...);
List<ExporterFormKey> newList = new ArrayList<ExporterFormKey>(test.getItems());
List newList=newarraylist(test.getItems());
我在测试工作中也发现了这种变化

public List<T> getItems(){
    return new ArrayList<T>(ldp.getList());
}
公共列表getItems(){
返回新的ArrayList(ldp.getList());
}

正如izaera所建议的,ListDataProvider使用不可序列化的列表实现(ListWrapper),该实现不能直接通过网络发送


按照您在文章中的建议,将ListDataProvider的getList()方法的响应包装到新的ArrayList中是解决此问题的最简单方法

您可能必须强制转换test.getList()以键入List或用声明test。您的ListDataProvider()可能不是返回ArrayList,而是返回List的另一个实现(例如Collections.unmodifiableList())返回的是list或AbstractList派生的类型。请发布完整的SerializationException和服务器日志好吗?它应该说明序列化失败的原因,以及哪个类有问题。如果有人访问此处寻求答案,则上面的链接现在已失效,并返回404。该页面似乎也未被缓存。