克隆HashSet时如何避免未经检查的强制转换警告?

时间:2012-02-12 21:24:59

标签: java clone hashset

我试图制作一个名为myHash的HashSet of Points的浅表副本。截至目前,我有以下内容:

HashSet<Point> myNewHash = (HashSet<Point>) myHash.clone();

此代码为我提供了未经检查的强制警告。有更好的方法吗?

2 个答案:

答案 0 :(得分:43)

你可以试试这个:

HashSet<Point> myNewHash = new HashSet<Point>(myHash);

答案 1 :(得分:6)

另一个答案建议使用new HashSet<Point>(myHash)。但是,clone()的意图是获取相同类型的新对象。如果myHashHashSet的子类的实例,则使用new HashSet<Point>(myHash)将丢失子类化添加的任何其他行为。

未经检查的投射警告只是一个警告。在很多情况下,强制转换是安全的,但编译器不够聪明,无法确定它是否安全。但是,您可以将警告隔离到可以使用@SuppressWarnings("unchecked")注释的单个方法中:

@SuppressWarnings("unchecked")
static <T implements Cloneable> clone(T o) { return (T)(o.clone()); }