私はCloneableインターフェイスを実装しているパッケージからクラス(BaseClassと呼ぶ)を使用していますが、super.clone()を呼び出すのではなく、新しいオブジェクトを作成しているようです。私はこのBaseClassのSubClassを作ってしまい、それをクローンしようとするとクラッシュします。java Cloneable:ベースクラスが間違って実装しています。何をすべきか?
// from library
class BaseClass implements Cloneable{
public void clone(){
BaseClass clone = new BaseClass(); // I guess?
...
return clone;
}
}
// my subclass
class SubClass extends BaseClass{
public void clone() throws CloneNotSupportedException {
return (SubClass) super.clone(); // throws ClassCastException
}
}
一つの方法は、BaseClassのを拡張スキップして、それは本当に私のコードが複雑になるもののちょうど、ポインタを使用することです:コードでは、私はこのような何かを持っています。
実際にコピーを作成する必要がある場合はどうすればよいですか?正確なBaseClassのクローン()メソッドを見ずに
おかげ
基底クラスが間違っていると 'クローン()'の契約に違反します。あなたはそれを修理するようにメンテナーに伝える立場にいますか? – Nayuki
私はそれが放棄されていることを恐れている – user6502063
さて、残念ながら、 'Object.clone()'に直接バイパスするオプションはありません:http://stackoverflow.com/questions/3456177/calling-super-super-class-method – Nayuki