2015-11-06 60 views
-2

的方法,我有一个HashMap:get()方法的HashMap

Map stuff = new HashMap<String, ArrayList<Thing>(); 

我试图用.get()方法来获取ArrayList,但我有一个错误信息说,

对象不能被转换为ArrayList;

我不是很确定为什么我得到这个错误信息?另外,还有另外一种方法来获取钥匙上的ArrayList

+1

您可以添加代码中您尝试'.get()'的部分吗? –

+0

我在你的声明中注意到''new HashMap ()',你错过了另一个'>'。 – Keale

回答

2

尝试使用<>参数化地图声明。

Map<String, ArrayList<Thing>> stuff = new HashMap<>() ; 

没有类型声明这将是一个类型化的地图,所以编译器将只能假定GET的结果是最通用的可能的结果,一个对象。

使用菱形运算符,编译器将从左手声明中推断出右侧的类型。

您可以将返回的结果转换为ArrayList,但最好是参数化Map声明。强制转换将需要运行时检查,这些检查有一些性能成本,并且一旦代码变得更难理解,可能会引发崩溃。如果您使用参数化表单,编译器可以证明它是正确的类型,可以防止崩溃并更快地运行。

如果您使用的是java 1.7之前的老版本的java,那么您需要在<>中写出完整的类型。

从oracle获取更多信息,请参阅此tutorial

+0

如果您使用的是Java 7或8.对于较早的Java版本,您将不得不使用完整的表单。 Map > stuff = new HashMap >(); – whaleberg