如何避免在克隆哈希集时出现未经检查的强制转换警告?

2022-09-01 15:16:13

我正在尝试制作一个名为myHash的HashSet的浅层点副本。截至目前,我有以下内容:

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

但是,此代码会给我一个未经检查的强制转换警告。有没有更好的方法来做到这一点?


答案 1

你可以试试这个:

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

答案 2

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

未经检查的强制转换警告只是警告。在许多情况下,强制转换是安全的,但编译器不够智能,无法确定它是安全的。但是,您可以将警告隔离到单个方法中,该方法可以使用以下内容进行注释:@SuppressWarnings("unchecked")

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