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

发布于 2025-01-05 01:29:55 字数 185 浏览 2 评论 0原文

我正在尝试制作名为 myHash 的点哈希集的浅表副本。截至目前,我有以下内容:

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

但是,此代码给了我一个未经检查的强制转换警告。有更好的方法吗?

I'm trying to make a shallow copy of a HashSet of Points called myHash. As of now, I have the following:

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

This code gives me an unchecked cast warning however. Is there a better way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怪我鬧 2025-01-12 01:29:55

你可以试试这个:

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

You can try this:

HashSet<Point> myNewHash = new HashSet<Point>(myHash);
清醇 2025-01-12 01:29:55

另一个答案建议使用new HashSet(myHash)。然而,clone() 的目的是获取相同类型的新对象。如果 myHashHashSet 子类的实例,则使用 new HashSet(myHash)

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

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

A different answer suggests using new HashSet<Point>(myHash). However, the intent of clone() is to obtain a new object of the same type. If myHash is an instance of a subclass of HashSet, any additional behavior added by subclassing will be lost by using new HashSet<Point>(myHash).

An unchecked cast warning is just a warning. There are many situations in which the cast is safe, but the compiler just isn't smart enough to determine that it is safe. You can, however, isolate the warning into a single method that can be annotated with @SuppressWarnings("unchecked"):

@SuppressWarnings("unchecked")
static <T implements Cloneable> clone(T o) { return (T)(o.clone()); }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文