0

我已经在 Map 中存储了一个 ArrayList,我正在尝试取回这个 ArrayList:

//init map with data: Map<Integer, ArrayList<MyObject>>
while(iterator.hasNext()) {
  Entry entry = iterator.next();
  ArrayList value = (ArrayList)entry.getValue();
}

将 entry.getValue() 转换为一般的 ArrayList 似乎有效,但是当我尝试将其转换为特定的 ArrayList 时:

ArrayList<MyObject> value = (ArrayList<MyObject>)entry.getValue();

编译器通过错误。某种“上次编译的警告”。是否可以将其转换为我的特定 ArrayList 以便之后我可以使用 For-Each-Loop 循环它?

4

2 回答 2

5

如果您正在创建这样的地图

Map<Integer, ArrayList<MyObject>> map = new HashMap<Integer, ArrayList<MyObject>>();

您不需要投射,因此没有WARNING

for(Entry<Integer, ArrayList<MyObject>> e : map.entrySet()) {
    Integer key = e.getKey();
    ArrayList<MyObject> value = e.getValue();
}

完成了泛型介绍,基本上避免了这些警告。使用泛型,我们应该定义我们想要存储在数据结构中的对象的“类型”。因此,在检索时,Java 编译器确切地知道数据结构正在返回什么对象。

于 2013-05-24T17:34:04.620 回答
0
ArrayList<MyObject> value = e.getValue();

应该没问题,不需要强制转换,因为您已经定义了正确的类型:

Map<Integer, ArrayList<MyObject>>
于 2013-05-24T17:35:37.373 回答