我正在编写一些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 !
我再也没有错了。有人能解释一下为什么吗?有什么区别?
附言:在有人问我之前,我应该说,这个错误是在我向链接列表中添加任何内容时抛出的(举第一个例子)!
问题在于clone()
的返回类型:它是Object
,而不是HashMap<String,Object>
。这就是为什么第二个片段有效,但第一个片段无效。
您可以通过构造函数构建哈希映射的副本来修复第一个代码片段:
errorManagement.add(new HashMap<String,Object>(i));
默认情况下,Object是每个类的父级,因此HashMap的类型是Object,因此您可以添加Object的子级,即HashMap。
另一件事是克隆返回类型是Object,因此即使您将其类型强制转换回HashMap,也应该能够执行同样的操作。
所以,如果你想摆脱错误,那么你应该改变
errorManagement.add(i.clone());
至
errorManagement.add((HashMap)i.clone());