2013-04-20 70 views
2

的深层副本我想在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 
    } 
} 
名单的另一类

实施deepcopy的:

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)); 
        } 
} 

这里是电话:

List<Class1> list= new List<Class1>(); 
//fill list... 
List<Class1> aCopy=(List<Class1>) deepCopy(list); 
+1

您可以通过不试图做到这一点可能改善它。如果您绝对必须进行深层复制,请在呼叫站点从头开始实施;试图做到这一点是不可行的。 – 2013-04-20 18:06:12

回答

1

而不是提供自己的界面深了这一点,你可以使用Java库的可复制的。 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Cloneable.html

大部分的Java类已经实现了这个interface.Like的ArrayList等

+0

是的,你说得对,谢谢。 – aLogic 2013-04-20 12:16:19

+1

我建议在看[泛型克隆(http://stackoverflow.com/questions/803971/cloning-with-generics),他们带来了的事情之一是如何Cloneable''是一个破碎的接口。 – atomman 2013-04-20 12:26:22