解析java.util.ArrayList $ SubList notSerializable异常

Oth*_*ane 22 java serialization rmi arraylist

我在List类型的对象上使用SubList函数.问题是我正在使用RMI,因为java.util.ArrayList $ SubList是由一个非可序列化的类实现的,当我尝试将结果对象作为参数传递给远程函数时,我得到了上面描述的异常同样.我已经看到我应该将生成的List复制到新的LinkedList或ArrayList并传递它.

有没有人知道一个功能,有助于为此轻松做到这一点?

List<String> list = originalList.subList(0, 10);
Run Code Online (Sandbox Code Playgroud)

ara*_*daM 38

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

ArrayList<String> list = new ArrayList<String>(originalList.subList(0, 10));
Run Code Online (Sandbox Code Playgroud)


Oth*_*ane 7

解决方案就是这个代码:

ArrayList<String> list = new ArrayList<String>();
list.addAll(originalList.subList(0, 10));
Run Code Online (Sandbox Code Playgroud)

  • 另一个提出的解决方案更好,因为它将预先分配完整大小一次,而不是可能必须分配默认大小,然后在添加元素时为子列表重新分配空间. (5认同)