2013-04-20 72 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