我有一組類用於存儲我目前正在嘗試實現深度複製機制的數據。爲此,我想在我的抽象類中定義一個方法deepCopy()
,每個擴展類都需要實現。如何從它實現的類中確定方法的返回類型?
我在一個通用的方法定義的抽象方法讓每一位deepCopy()
返回它在實現的類的對象掙扎。
public abstract class Foo {
public abstract Foo deepCopy();
}
public class Bar extends Data {
@Override
public Bar deepCopy() {
//copying;
}
}
這是我想達到的目標,但我最終與此:
public abstract class Foo {
public abstract Foo deepCopy();
}
public class Bar extends Data {
@Override
public Foo deepCopy() {
//copying;
}
}
打電話時deepCopy()
這將導致一個錯誤:
public SomeClass extends Foo {
private Bar value;
private SomeClass(final SomeClass original) {
this.value = original.deepCopy(); // type-mismatch since deepCopy returns Foo but value is Bar.
}
@Override
public Foo deepCopy() {
return new SomeClass(this);
}
}
解決此問題的最簡單方法是將deepCopy的返回對象轉換爲Bar,但這看起來不對。
有沒有一種乾淨的方式來實現這一目標?
除了它相當破碎的事實,使用'clone'有什麼問題? – Bathsheba
@Bathsheba:每次我收集有關深拷貝對象的信息時,我都會讀到使用克隆應該避免的問題。 – padde