nam*_*min 2 java generics casting unchecked
我有一个基类,说Base这规定了抽象的方法deepCopy,和子类,比如无数A,B,C,... Z.如何定义deepCopy以使其签名适用public X deepCopy()于每个类X?
对,现在,我有:
abstract class Base {
public abstract Base deepCopy();
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这意味着,如果,如果我有从子类的对象,说a的A话,我总是有一个更具体的深层副本执行未经检查的转换:
A aCopy = (A) a.deepCopy();
Run Code Online (Sandbox Code Playgroud)
有没有办法,也许使用泛型,以避免施法?我想保证任何深层副本都返回同一运行时类的对象.
编辑:让我扩展我的答案,因为协变打字是不够的.说,然后我想实现一个方法,如:
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;
}
Run Code Online (Sandbox Code Playgroud)
我怎么能避免未经检查的警告?
Java 5支持协变返回类型,这意味着您可以deepCopy()在每个子类中实现您的方法以返回特定的子类实例; 例如
public class Z extends Base {
@Override
public Z deepCopy() {
}
}
Run Code Online (Sandbox Code Playgroud)
更多关于协变返回类型的信息.