好的,你有更多更廣泛的問題。我必須說你搞砸了。這裏是相關的問題: Force every class of an inheritance chain to override an abstract method
任何抽象類實現Cloneable
實際上依賴於Object.clone()
的主要問題。因此,它是在一般的問題,而解決辦法,但...
提出的解決方案:
我有一個想法從這裏:Mandatory cloneable interface in Java
public interface Modifiable<T extends Modifiable<T>> extends Cloneable {
T clone();
}
public class Foo implements Modifiable<Foo> {
public Foo clone() { //this is required
return null; //todo: real work
}
}
比什麼都貼在這裏要好得多。
上一頁GUESSINS:
也許你的想法是不是100%清楚,但適用這種方法?
public abstract class AbstractFoo implements Cloneable {
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
然後......
public class Foobar extends AbstractFoo {
@Override
public Object clone() {
try {
Foobar c = (Foobar) super.clone();
/* some operations */
return c;
} catch (CloneNotSupportedException e) {
throw new InternalError();
}
}
}
嗯......如果你需要強制後代impleement克隆...其實我不喜歡這個主意的氣味,但爲什麼不做某事像這樣在這種情況下?
public abstract class AbstractFoo implements Cloneable {
public Object clone() throws CloneNotSupportedException {
return cloneMe();
}
abstract protected Object cloneMe();
}
最後...不好,但你問這個;-)。
public class Foobar extends AbstractFoo {
@Override
public Object cloneMe() {
try {
Foobar c = (Foobar) super.clone();
/* some operations */
return c;
} catch (CloneNotSupportedException e) {
throw new InternalError();
}
}
}
我不明白。你期望'super.clone();'做什麼?你想要它做什麼? – 2015-02-08 16:23:59
你能解釋一下你想做什麼以及哪些不起作用嗎?更具描述性的標題也是有用的。 – 2015-02-08 16:24:25
如果Foobar實現了Cloneable並且沒有擴展AbstractFoo,這段代碼就可以工作。 我該怎麼做「相同」,但擴展抽象類? – 2015-02-08 16:27:59