我试图制作一个名为myHash的HashSet of Points的浅表副本。截至目前,我有以下内容:
HashSet<Point> myNewHash = (HashSet<Point>) myHash.clone();
此代码为我提供了未经检查的强制警告。有更好的方法吗?
答案 0 :(得分:43)
你可以试试这个:
HashSet<Point> myNewHash = new HashSet<Point>(myHash);
答案 1 :(得分:6)
另一个答案建议使用new HashSet<Point>(myHash)
。但是,clone()
的意图是获取相同类型的新对象。如果myHash
是HashSet
的子类的实例,则使用new HashSet<Point>(myHash)
将丢失子类化添加的任何其他行为。
未经检查的投射警告只是一个警告。在很多情况下,强制转换是安全的,但编译器不够聪明,无法确定它是否安全。但是,您可以将警告隔离到可以使用@SuppressWarnings("unchecked")
注释的单个方法中:
@SuppressWarnings("unchecked")
static <T implements Cloneable> clone(T o) { return (T)(o.clone()); }