Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通用列表的深度副本_Java_List_Deep Copy - Fatal编程技术网

Java 通用列表的深度副本

Java 通用列表的深度副本,java,list,deep-copy,Java,List,Deep Copy,我想用Java制作一个通用列表的深度副本。如何改进此代码 public interface Deep{} public class Class1() implements Deep{ public Class1(Class1 o){ //implementation of deep copy } } public class Class2() implements Deep{ public Class2(Class2 o){ //i

我想用Java制作一个通用列表的深度副本。如何改进此代码

public interface Deep{}
public class Class1() implements Deep{
    public Class1(Class1 o){
        //implementation of deep copy
    }
}   

public class Class2() implements Deep{
    public Class2(Class2 o){
        //implementation of deep copy
    }
}
在另一个类中实现列表的深度复制:

public List<Deep> deepCopy(List<Deep> inList){
    if(inList.get(0) instanceof Class1){
        List<Deep> newList=new ArrayList<Class1>();
            for (Deep deep : inList) 
            newList.add(new Class1((Class1) deep));
            }
    else if(inList.get(0) instanceof Class2){
        List<Deep> newList=new ArrayList<Class2>();
            for (Deep deep : inList) 
            newList.add(new Class2((Class2) deep));
                  }
}
public List deepCopy(列表中的列表){
if(inList.get(0)instanceof Class1){
List newList=newarraylist();
for(深:inList)
添加(newclass1((Class1)deep));
}
else if(inList.get(0)类2实例){
List newList=newarraylist();
for(深:inList)
add(newclass2((Class2)deep));
}
}
这是电话:

List<Class1> list= new List<Class1>();
//fill list...
List<Class1> aCopy=(List<Class1>) deepCopy(list);
List List=新列表();
//填充列表。。。
List aCopy=(List)deepCopy(List);

您可以使用java库的Cloneable,而不是为此提供自己的深层接口。


大多数java类都已经实现了这个接口。比如ArrayList等。

我建议看一看,他们提出的一个问题是,
Cloneable
是一个坏接口。你可以通过不尝试来改进它。如果你一定要做一个深度拷贝,在调用站点从头开始实现它;一般来说,尝试这样做是不可行的。