私は抽象メソッドdeepCopy
を指定する基本クラス、例えばBase
と、無数のサブクラス、例えばA
、B
、C
、... Z
を持っています。どのようにしてdeepCopy
を定義して、各クラスX
の署名がpublic X deepCopy()
になるのでしょうか?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