通用類型T, E
的深度副本(克隆)如何在Java中工作?可能嗎?Java中的通用類型的深度副本
E oldItem;
E newItem = olditem.clone(); // does not work
通用類型T, E
的深度副本(克隆)如何在Java中工作?可能嗎?Java中的通用類型的深度副本
E oldItem;
E newItem = olditem.clone(); // does not work
答案是否定的。因爲在編譯期間沒有辦法找出哪個類將替換您的泛型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();
}
}
檢查了這一點:http://stackoverflow.com/questions/64036/how-do-you-make-a-deep-copy-of-an-object-in-java – madoke 2013-05-08 09:14:49
沒有通用的方法來克隆Java中的對象。具體的類有公共的clone()方法,但是在這裏你不知道它是哪個類。 – newacct 2013-05-08 19:56:26