Java 对象的LinkedList和HashMap的LinkedList之间的区别?
我正在编写一些Java代码,但我发现我无法做到:Java 对象的LinkedList和HashMap的LinkedList之间的区别?,java,linked-list,hashmap,Java,Linked List,Hashmap,我正在编写一些Java代码,但我发现我无法做到: LinkedList<HashMap<String,Object>> errorManagement = new LinkedList<HashMap<String, Object>>(); HashMap<String,Object> i = new HashMap<String,Object>(); errorManagement.add(i.clone()); <
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
LinkedList errorManagement=新建LinkedList();
HashMap i=新的HashMap();
errorManagement.add(i.clone()) 问题在于clone()
的返回类型:它是Object
,而不是HashMap
。这就是为什么第二个代码段有效,但第一个代码段无效
您可以通过构造函数构造哈希映射的副本来修复第一个代码段:
errorManagement.add(new HashMap<String,Object>(i));
errorManagement.add(新HashMap(i));
默认情况下,对象是每个类的父对象,因此HashMap属于Object类型,因此您可以添加对象的子对象,即HashMap
另一件事是克隆返回类型为Object,因此即使您键入cast将其转换回HashMap,您也应该能够执行相同的操作
所以,如果你想摆脱错误,那么你应该改变
errorManagement.add(i.clone());
到
您是否已经检查了克隆的返回类型?如果粘贴异常堆栈跟踪,将非常有用。此外:您可以编写HashMap i=newhashmap()代码>。。。不需要重复类型信息。@EddyG这是一个编译器错误。@MarkoTopolnik好的,那么您必须使用Java 1.6;菱形操作符是用1.7引入的;我刚刚发布的这行代码非常好。@EddyG OP的错误是一个编译器错误。
errorManagement.add(i.clone());
errorManagement.add((HashMap)i.clone());