我正在编写一些Java代码,但我发现我无法做到这一点:
LinkedList<HashMap<String,Object>> errorManagement = new LinkedList<HashMap<String, Object>>();
HashMap<String,Object> i = new HashMap<String,Object>();
errorManagement.add(i.clone()); <-- impossible to add the hash map here
如果我想在我的链接列表中添加哈希映射,我会收到一些错误...
我想通过这样做:
HashMap<String,Object> tokenInfo = new HashMap<String,Object>();
LinkedList<Object> errorManagement = new LinkedList<Object>();
errorManagement.add(tokenInfo.clone()); <-- everything working like a charm !
我没有更多的错误。 愿有人解释我为什么吗?有什么区别?
P.S。 :我应该说,在有人问我之前,当我在链接列表中添加任何内容时(第一个示例),错误被抛出!
答案 0 :(得分:4)
问题是clone()
的返回类型:它是Object
,而不是HashMap<String,Object>
。这就是为什么第二个片段有效,但第一个片段没有。
您可以通过构造函数构建哈希映射的副本来修复第一个代码段:
errorManagement.add(new HashMap<String,Object>(i));
答案 1 :(得分:1)
默认情况下,Object是每个类的父级,因此HashMap的类型为Object,因此您可以添加Object的子级,即HashMap。
另一件事是clone返回类型是Object,因此即使你输入它回到HashMap,你也应该能够做到这一点。
因此,如果你想摆脱错误,那么你应该改变
errorManagement.add(i.clone());
要
errorManagement.add((HashMap)i.clone());