我想克隆列表:
public List<List<Test>> a = new ArrayList<List<Test>>();
public List<List<Test>> b = new ArrayList<List<Test>>();但如果我这么做了:
b = (ArrayList<List<Test>>)a.clone();出现错误:
The method clone() is undefined for the type List<List<Test>>你能帮帮我吗?
发布于 2013-02-03 20:41:39
java.util.List不实现Cloneable,因此编译器不能确保您正在使用的具体实现能够实现。因此,它不允许您编写调用可能不存在的方法的代码。
如果你知道具体的实现,你可以转换它。V.g.,如果它是一个ArrayList<List<Test>> (因为ArrayList实现了Cloneable),那么您需要
b = (List<List<Test>>) ((ArrayList<List<Test>>) a).clone();如果不这样做,请实现您自己的方法。
请记住,默认的clone会进行浅层复制。也就是说,返回的对象将是一个新的List<List<Test>>,但是内部的List<Test>和Test不会被复制,您将获得对原始对象的引用。
发布于 2013-02-03 20:42:32
clone()不适用于抽象列表,仅适用于ArrayList。但是,它不会像您预期的那样工作,因为它只返回一个浅拷贝。要制作深度副本,您需要循环克隆:
for (List<Test> item: a)
b.add(new ArrayList(item);发布于 2013-02-03 20:41:58
使用构造函数或addAll方法:
new ArrayList<>(a);
//or
b.addAll(a);https://stackoverflow.com/questions/14672527
复制相似问题