Base
抽象メソッドを指定する基本クラスと、、、 ...deepCopy
などの無数のサブクラスがあります。その署名が各クラスに対応するように定義するにはどうすればよいですか?A
B
C
Z
deepCopy
public X deepCopy()
X
さて、今、私は持っています:
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;
}
未チェックの警告を回避するにはどうすればよいですか?