我有一个对象模型,它有一个父对象,我将在这里调用它 MyParent.java。该类有两个名为 MySub1.java 和 MySub2.java 的子类。
我有两个 HashMap,一个包含 MySub1 实例,另一个包含 MySub2 实例。我正在尝试编写一段代码,它可以同时处理 HashMap 并执行完全相同的操作(稍后,拥有 MySub1 或 MySub2 实例会产生一些影响,但不是在这里)。
这是编译的代码部分:
HashMap<String, ? extends MyParent> map = null;
if (some condition)
map = // get a HashMap<String, MySub1>
if (some other condition)
map = // get a HashMap<String, MySub2>
但是现在,我无法弄清楚如何迭代map
变量。我需要通过迭代器而不是通过对元素的迭代来完成它,keySet()
因为我需要从哈希图中删除一些元素。
这是我的代码中未编译的部分:
if(map != null && map.size() > 0){
Iterator<Entry<String, ? extends MyParent>> i = map.entrySet().iterator();
while(i.hasNext()){
Map.Entry<String, MyParent> pair = (Map.Entry<String, MyParent>) i.next();
// get the object from the pair and handle it
}
}
Eclipse 确实在我创建迭代器的行上打印了这条错误消息:
cannot convert from Iterator<Map.Entry<String,capture#5-of ? extends MyParent>> to Iterator<Map.Entry<String,? extends MyParent>>
我真的没有收到错误信息。如果我将代码的第一行更改为:
HashMap<String, MyParent> map = null
现在,不工作的代码确实可以工作,但是工作代码不再工作,并出现以下错误消息:
cannot convert from HashMap<String,MySub1> to HashMap<String,MyParent>
任何的想法 ?