我将数据存储在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?
谢谢。
在该范围内如何表达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,则上面的行可能是:
ArrayList
MyClass
HashMap<String, ArrayList<MyClass>> dictMap