我想要深度克隆一个List,为此我们有一个方法:
// apache commons method. This object should be serializable
SerializationUtils.clone ( object )
现在我想克隆我的List,我应该先将其转换为Serializable。是否可以将List转换为Serializable列表?
我想要深度克隆一个List,为此我们有一个方法:
// apache commons method. This object should be serializable
SerializationUtils.clone ( object )
现在我想克隆我的List,我应该先将其转换为Serializable。是否可以将List转换为Serializable列表?
所有标准的java.util.List
实现已经实现了java.io.Serializable
。
所以,即使java.util.List
本身不是java.io.Serializable
的子类型,只要你知道它是像ArrayList
或LinkedList
这样的标准实现之一,将该列表转换为Serializable
应该是安全的。
如果你不确定,那么先复制列表(使用类似于new ArrayList(myList)
的方法),然后你就知道它是可序列化的。
如已经指出的那样,大多数标准的List
实现都是可序列化的。但是您必须确保列表中引用/包含的对象也是可序列化的。
List
是一个不扩展Serializable
或任何扩展它的接口的接口。虽然在标准库中不太常见不可序列化的List
,但这并不意味着第一句话是正确的。 - arne.bList 只是一个接口。问题是:你实际使用的 List 实现是否可以进行序列化?就 Java 运行时的标准 List 实现(ArrayList、LinkedList)而言,它们中的大多数已经可以。
SerializationUtils.clone()
方法需要一个类型为Serializable
的参数,所以如果你的变量类型是List
,你需要进行强制类型转换。 - skaffmanList<MyClass> myObjs = new ArrayList<MyClass>();
不符合Serializable
,但ArrayList<MyClass> myObjs = new ArrayList<MyClass>();
符合要求。 - Evi Song<T extends List<Foo>&Serializable> setFooList(T list)
来保证安全性,该签名要求调用方向您传递一个同时实现了List和Serializable接口的List实现的实例。请注意不改变原意,尽量让翻译通俗易懂。 - Theodore Murdock