对象的LinkedList和HashMap的LinkedList之间的区别?

Difference between LinkedList of Object and a LinkedList of a HashMap?

我正在编写一些 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。 :我应该说,在有人问我之前,当我向我的链表添加任何东西时抛出了错误(对于第一个例子)!

问题是 clone() 的 return 类型:它是 Object,而不是 HashMap<String,Object>。这就是为什么第二个片段有效,但第一个片段无效的原因。

您可以通过构造函数构造散列映射的副本来修复第一个代码片段:

errorManagement.add(new HashMap<String,Object>(i));

默认情况下,对象是每个 class 的父对象,因此 HashMap 是对象类型,因此您可以添加对象的子对象,即 HashMap。

另一件事是克隆 return 类型是对象,因此即使您将其类型转换回 HashMap,您也应该能够执行相同的操作。

所以如果你想摆脱错误,那么你应该改变

 errorManagement.add(i.clone());

errorManagement.add((HashMap)i.clone());