親を持つオブジェクト モデルがあり、ここでは MyParent.java と呼びます。このクラスには、MySub1.java と MySub2.java という名前の 2 つのサブクラスがあります。
1 つは MySub1 インスタンスを含み、もう 1 つは 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>
何か案が ?