我将数据存储在 HashMap 中(键:String,值:ArrayList)。我遇到问题的部分声明了一个新的 ArrayList“current”,在 HashMap 中搜索字符串“dictCode”,如果找到,则将 current 设置为返回值 ArrayList。
ArrayList current = new ArrayList();
if(dictMap.containsKey(dictCode)) {
current = dictMap.get(dictCode);
}
“current =...”行返回编译器错误:
Error: incompatible types
found : java.lang.Object
required: java.util.ArrayList
我不明白这一点...HashMap 是否返回一个对象而不是我存储在其中作为值的 ArrayList?如何将此对象转换为 ArrayList?
谢谢。
HashMap 声明在该范围内是如何表达的?它应该是:
HashMap<String, ArrayList> dictMap
如果不是,则假定它是对象。
例如,如果您的代码是:
HashMap dictMap = new HashMap<String, ArrayList>();
...
ArrayList current = dictMap.get(dictCode);
这是行不通的。相反,你想要:
HashMap<String, ArrayList> dictMap = new HashMap<String, Arraylist>();
...
ArrayList current = dictMap.get(dictCode);
泛型的工作方式是类型信息可供编译器使用,但在运行时不可用。这称为类型擦除。 HashMap 的实现(或任何其他泛型实现)正在处理 Object。类型信息用于编译时的类型安全检查。请参阅泛型文档 http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html.
另请注意ArrayList http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html也作为泛型类实现,因此您可能也想在那里指定一个类型。假设你的ArrayList
包含你的班级MyClass
,上面的行可能是:
HashMap<String, ArrayList<MyClass>> dictMap
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)