如何在java中序列化列表?

Rak*_*yal 72 java collections serialization apache-commons

我想深入克隆一个List.因为我们有一个方法

// apache commons method. This object should be serializable
SerializationUtils.clone ( object ) 
Run Code Online (Sandbox Code Playgroud)

所以现在克隆我的列表我应该首先将其转换为可序列化.是否可以将List转换为可序列化列表?

ska*_*man 155

java.util.List已实施的所有标准实施java.io.Serializable.

因此,即使它java.util.List本身不是子类型java.io.Serializable,Serializable只要您知道它是标准实现之一,ArrayList或者将列表强制转换为应该是安全的LinkedList.

如果您不确定,请先复制列表(使用类似的东西new ArrayList(myList)),然后您就知道它是可序列化的.

  • 因为`SerializationUtils.clone()`需要一个类型为`Serializable`的参数,所以如果你的变量是`List`类型,你需要强制转换它. (19认同)
  • 是的,我在搜索Android解决方案时发现了这个问题.我的补充是,`List <MyClass> myObjs = new ArrayList <MyClass>();`不符合`Serializable`,但`ArrayList <MyClass> myObjs = new ArrayList <MyClass>();`的确如此. (11认同)
  • @Jesper:它是一个标记界面,表示序列化类是安全的.Android使用Serializable接口进行许多操作; 传递意图附加信息,共享偏好等. (2认同)
  • @Adam最好在编译时保证安全,而不是使用签名`<T extends List <Foo>&Serializable> setFooList(T list)`,这需要你的调用者传递一个List实现的实例,也是Serializable. (2认同)

Bri*_*new 32

正如已经指出的那样,大多数标准实现List都是可序列化的.但是,您必须确保列表中引用/包含的对象也是可序列化的.

  • 正如已经指出的,“List”是一个不扩展“Serialized”或任何这样做的接口的接口。不可序列化的列表在标准库中可能并不常见,但这并不能使第一句话正确。 (2认同)

Dir*_*irk 13

List只是一个界面.问题是:您的实际List实现是否可序列化?谈到Java运行时的标准List实现(ArrayList,LinkedList),其中大多数实际上已经存在.