【问题标题】:Difference between LinkedList of Object and a LinkedList of a HashMap?Object的LinkedList和HashMap的LinkedList有什么区别?
【发布时间】:2015-04-01 14:40:45
【问题描述】:

我正在编写一些 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的返回类型了吗?
  • 如果您粘贴异常堆栈跟踪会很有帮助。另外:可以写HashMap&lt;String,Object&gt; i = new HashMap&lt;&gt;();...不用重复类型信息。
  • @EddyG 这是编译器错误。
  • @MarkoTopolnik 好吧,那么您一定使用的是 Java 1.6;钻石算子是在 1.7 中引入的;而且我刚刚发布的那条线路非常好。
  • @EddyG OP 的错误是编译器错误。

标签: java linked-list hashmap


【解决方案1】:

问题是clone() 的返回类型:它是Object,而不是HashMap&lt;String,Object&gt;。这就是为什么第二个 sn-p 有效,但第一个无效的原因。

您可以通过构造函数构造哈希映射的副本来修复第一个代码sn-p:

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

【讨论】:

    【解决方案2】:

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

    另一件事是克隆返回类型是 Object,因此即使您将其类型转换回 HashMap,您也应该能够做到这一点。

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

     errorManagement.add(i.clone());
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 2011-05-15
      相关资源
      最近更新 更多