gpt4 book ai didi

java - 从 Java 中的 Object 转换而没有收到未经检查的警告

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:54 28 4
gpt4 key购买 nike

我写了一个类,它有一个 map <String, Object> .我需要它来保存任意对象,但同时有时我需要转换其中一些对象,所以我会做类似的事情

HashMap<String, Object> map = new HashMap<String, Object>();                                                                                 
Object foo = map.get("bar");
if (foo instanceof HashMap) {
((HashMap<String, Integer>) foo).put("a", 5);
}

发出警告

Stuff.java:10: warning: [unchecked] unchecked cast
found : java.lang.Object
required: java.util.HashMap<java.lang.String,java.lang.Integer>
((HashMap<String, Integer>) foo).put("a", 5);

我怀疑这与泛型的使用有关。我可以使用 @SupressWarnings("unchecked") 消除错误,但我想知道是否有更好的方法来做到这一点。或者我收到警告的事实意味着我应该重新考虑我在做什么。有什么我可以做的,还是我应该只使用@SupressWarnings?

最佳答案

已编辑(基于问题澄清)

转换为 HashMap<String, Integer> (顺便说一句,使用 Map 而不是 HashMap 可以说是更好的选择)是另一回事。遗憾的是,在这种情况下,由于类型删除,无法避免未经检查的警告。但是,您可以将其用作非通用 map :

if (foo instanceof Map) {                                                                                                                                                                                                        
((Map) foo).put("a", 5);
}

很明显,您必须对“gets”进行转换,并且您会失去(感知到的)类型安全性,但不会有未经检查的警告。


这个故事肯定还有更多。以下代码:

Map<String, Object> map = Maps.newHashMap(); // or new HashMap<String, Object>();
Object foo = map.get("bar");
if (foo instanceof Widget) {
((Widget) foo).spin();
}

NOT 是否为我生成未经检查的警告。我也无法想象为什么会这样。如果您事先知道“bar”总是会返回一个小部件,请执行以下操作:

Widget widget = (Widget) map.get("bar");
widget.spin();

也可以很好地工作。我在这里遗漏了什么吗?

关于java - 从 Java 中的 Object 转换而没有收到未经检查的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1774356/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com