一尘不染

HashMap(key:String,value:ArrayList)返回一个Object而不是ArrayList?

java

我将数据存储在HashMap中(键:字符串,值:ArrayList)。我遇到问题的部分声明了一个新的ArrayList“当前”,在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是否返回一个Object而不是我存储在其中的ArrayList作为值?如何将该对象转换为ArrayList?

谢谢。


阅读 226

收藏
2020-12-03

共1个答案

一尘不染

在该范围内如何表达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。类型信息在编译期间用于类型安全检查。请参阅泛型文档

还要注意,ArrayList它也被实现为通用类,因此您可能还需要在其中指定一个类型。假设您ArrayList的课程包含MyClass,则上面的行可能是:

HashMap<String, ArrayList<MyClass>> dictMap
2020-12-03