2013-05-08 56 views
4

通用類型T, E的深度副本(克隆)如何在Java中工作?可能嗎?Java中的通用類型的深度副本

E oldItem; 
E newItem = olditem.clone(); // does not work 
+0

檢查了這一點:http://stackoverflow.com/questions/64036/how-do-you-make-a-deep-copy-of-an-object-in-java – madoke 2013-05-08 09:14:49

+0

沒有通用的方法來克隆Java中的對象。具體的類有公共的clone()方法,但是在這裏你不知道它是哪個類。 – newacct 2013-05-08 19:56:26

回答

2

答案是否定的。因爲在編譯期間沒有辦法找出哪個類將替換您的泛型E,除非您的Bind it to a type

克隆

Java的方式是淺,深克隆,我們需要提供我們自己的實現

工作,圍繞它,是創造這樣

public interface DeepCloneable { 
    Object deepClone(); 
} 

和實現者合同應該有自己的深克隆邏輯

class YourDeepCloneClass implements DeepCloneable { 

    @Override 
    public Object deepClone() { 
     // logic to do deep-clone 
     return new YourDeepCloneClass(); 
    } 

} 

,它可以被稱爲像下面,這裏的泛型類型E是有限制類型

class Test<E extends DeepCloneable> { 

    public void testDeepClone(E arg) { 
     E e = (E) arg.deepClone(); 
    } 
} 
+2

做'返回新的YourDeepCloneClass();'不會爲子類 – newacct 2013-05-08 19:54:56

+0

@newacct感謝您的建議,但它只是一個例子,我想打算使用深複製邏輯 – sanbhat 2013-05-10 05:31:40