Java中的通用LinkedList克隆
我想克隆任何LinkedList,不管它是否包含可以作为原始包装的内容。我知道这可能是一个深度递归调用,以获得真正的深度克隆,但我只需要一个级别的克隆。我无法编译以下代码:
<T> LinkedList<T> deepCloneOneLevel (final LinkedList<T> input){
if(input != null){
LinkedList<T> clone = new LinkedList<>();
for (T t: input){
clone.add(t.clone()); //error : clone() has protected access
}
return clone;
}
return null;
}
# 1 楼答案
正如评论中提到的,Java的Cloneable不是一种非常友好的克隆对象的方法。因此,您可能需要定义
Cloneable
接口,并确保并在代码中使用它
而且
MyClone
的实现知道浅拷贝是足够的还是需要深拷贝但是如果类型没有实现
MyClone
,该怎么办?好问题。我们可以添加一个重载,它使用clone
“工厂”如果您的平台还没有
Function
,您可以轻松编写自己的,或者使用Guava的# 2 楼答案
由于
clone()
方法在java世界中是一个大烂摊子,一个解决方案可能是使用apache commons SerializationUtils。它使用序列化来复制对象,因此速度很慢。更糟糕的是,如果您的类包含不支持序列化的字段,您将遇到问题。下面是一个例子: