我有一个HashMap:
Map stuff = new HashMap<String, ArrayList<Thing>();
我正在尝试使用.get()
方法获取ArrayList
,但我收到一条错误消息,
无法将对象转换为ArrayList;
我不确定为什么会收到此错误消息?另外,还有另一种获取密钥ArrayList
的方法吗?
答案 0 :(得分:2)
尝试使用&lt;&gt;参数化地图声明。
Map<String, ArrayList<Thing>> stuff = new HashMap<>() ;
如果没有类型声明,它将是一个无类型的Map,因此编译器只能假设get的结果是最通用的可能结果,即Object。
使用菱形运算符,编译器将从左侧声明中推断出右侧的类型。
您可以将get的结果转换为ArrayList,但最好参数化Map声明。强制转换将需要运行时检查,这些检查具有一定的性能成本,并且一旦您的代码变得更难理解,就可能引入崩溃。如果使用参数化形式,编译器可以证明它是正确的类型,防止崩溃并且运行得更快。
如果你在java 1.7之前使用旧的java,你需要在&lt;&gt;中写出完整的类型。
有关详细信息,请参阅oracle中的tutorial。