gpt4 book ai didi

java - Java 中的通用链表克隆

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:58 26 4
gpt4 key购买 nike

我想克隆任何 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;
}

最佳答案

如评论中所述,Java 的 Cloneable 不是一种非常友好的克隆对象的方法。因此,您可能需要定义您的 Cloneable 接口(interface),并确保

interface MyClone<T>{
T clone();
}

并在你的代码中使用它

 <T extends MyClone<? super T>> LinkedList<T> deepCloneOneLevel (final LinkedList<T> input){
if(input != null){
LinkedList<T> clone = new LinkedList<>();
for (T t: input){
clone.add(t.clone());
}
return clone;
}
return null;
}

MyClone 的实现知道浅拷贝是否足够或是否需要深拷贝

但是如果类型没有实现 MyClone 怎么办?好问题。我们可以添加一个采用克隆“工厂”的重载。

<T> LinkedList<T> deepCloneOneLevel (final LinkedList<T> input, Function<T,T> factory){
if(input != null){
LinkedList<T> clone = new LinkedList<>();
for (T t: input){
clone.add(factory.apply(t));
}
return clone;
}
return null;
}

如果您的平台还没有Function,您可以轻松编写自己的,或使用Guava 的。

关于java - Java 中的通用链表克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34962699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com