Object的LinkedList和HashMap的LinkedList之间的区别



我正在编写一些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());

最新更新