解析java.util.ArrayList$子列表notSerializable异常

解析java.util.ArrayList$子列表notSerializable异常,java,serialization,arraylist,rmi,Java,Serialization,Arraylist,Rmi,我正在列表类型的对象上使用SubList函数。问题是我使用的是RMI,并且由于java.util.ArrayList$子列表是由一个不可序列化的类实现的,所以当我尝试将结果对象传递给一个以列表作为参数的远程函数时,出现了上述异常。 我已经看到,我应该将结果列表复制到一个新的LinkedList或ArrayList并传递它 例如,有人知道一个函数可以帮助您轻松地完成此任务吗 List<String> list = originalList.subList(0, 10); List L

我正在列表类型的对象上使用SubList函数。问题是我使用的是RMI,并且由于java.util.ArrayList$子列表是由一个不可序列化的类实现的,所以当我尝试将结果对象传递给一个以列表作为参数的远程函数时,出现了上述异常。 我已经看到,我应该将结果列表复制到一个新的LinkedList或ArrayList并传递它

例如,有人知道一个函数可以帮助您轻松地完成此任务吗

List<String> list = originalList.subList(0, 10);
List List=originalList.subList(0,10);

解决方案就是这样的代码:

ArrayList<String> list = new ArrayList<String>();
list.addAll(originalList.subList(0, 10));
ArrayList list=new ArrayList();
list.addAll(原始列表子列表(0,10));

这是因为subList()方法返回的列表是不可序列化的“RandomAccessSubList”的实例。因此,您需要从子列表()返回的列表中创建一个新的ArrayList对象

ArrayList list=新的ArrayList(originalList.subList(0,10));

您可以非常轻松地复制列表。ArrayList构造函数将接受现有集合(包括您的子列表)作为参数,并执行复制。@Afforess偷走了我的答案。只要把它复制到一个你知道是可序列化的列表中就行了。好吧,这就是我用ArrayList做的@女士,你为什么不发表你的评论作为回答呢?然后OP可以接受您的答案。另一个建议的解决方案更好,因为它将预先分配一次完整大小,而不是可能必须分配默认大小,然后在添加元素时为子列表重新分配空间。如果您关心性能,则不应创建两次相同的子列表
ArrayList<String> list = new ArrayList<String>(originalList.subList(0, 10));