我有一個基類,說Base
,它指定的抽象方法deepCopy
,以及無數的子類,說A
,B
,C
,。我如何定義deepCopy
,使其簽名爲public X deepCopy()
,每個類X
?如何在Java類層次結構中實現泛型類型安全的深度克隆?
權,現在,我有:
abstract class Base {
public abstract Base deepCopy();
}
不幸的是,這意味着,如果,如果我有一個子類的對象,說a
A
的,然後我總是有一個更執行未經檢查的投特定的深拷貝:
A aCopy = (A) a.deepCopy();
有沒有一種方法,也許使用泛型,以避免鑄造?我想保證任何深層副本都會返回相同運行時類的對象。
編輯:讓我擴展我的答案,因爲協變鍵入是不夠的。說,然後我想實施一種方法,如:
static <N extends Base> List<N> copyNodes(List<N> nodes) {
List<N> list = Lists.newArrayList();
for (N node : nodes) {
@SuppressWarnings("unchecked")
N copy = (N) node.deepCopy();
list.add(copy);
}
return list;
}
我怎樣才能避免未經檢查的警告?
有幾個公用事業公司會爲你做這件事...... http://www.genericdeepcopy.com/和http://code.google.com/p/cloning/。 – Aaron 2011-12-25 17:03:23