私はjava genericsの新機能で、次の問題に直面しています。 私は細かい作業この1 なぜHashMap <String、Object>はHashMap <String、List>インスタンスを受け付けませんか?
fillDescriptiveData(ObjectMap,"here");
方法以下のようにAPIを呼び出す場合、私は、のようなメソッドを持っている今HashMap<String, Object> ObjectMap = new HashMap<String, Object>(); HashMap<String, List> listMap = new HashMap<String, List>();
private static void fillDescriptiveData(HashMap<String, Object> output, String attributeMapping) { for (Map.Entry<String, Object> outputInEntry : output.entrySet()) { String outputKey = outputInEntry.getKey(); String outputValue = outputInEntry.getValue().toString(); outputValue = getDescriptiveDataForOutput(outputKey, outputValue, attributeMapping); outputInEntry.setValue(outputValue); } }
を持っています。
はfillDescriptiveData(listMap,"here");
このコール
型CustomAttributeにおける方法fillDescriptiveData(ハッシュマップ、文字列)の引数(HashMapの文字列) `
には適用されないエラーを与えますどうして ?私は1つの以上の問題に遭遇し、この問題を解決するために、行に
、
private static void fillDescriptiveData(HashMap<String, ? extends Object> output, String attributeMapping) {
for (Map.Entry<String, ? extends Object> outputInEntry : output.entrySet()) {
String outputKey = outputInEntry.getKey();
String outputValue = outputInEntry.getValue().toString();
outputValue = getDescriptiveDataForOutput(outputKey, outputValue, attributeMapping);
outputInEntry.setValue(outputValue); /* Error comes at this line */
}
}
HashMap<String, ? extends Object> ObjectMap = new HashMap<String, Object>();
HashMap<String, List> listMap = new HashMap<String, List>();
fillDescriptiveData(ObjectMap,"here");
fillDescriptiveData(listMap,"here");
線にエラー - outputInEntry.setValue(outputValue);
メソッドSetValue(?キャプチャ#4のオブジェクトを拡張)にタイプ のMap.Entryは 引数(文字列)
理由には適用されませんか?
この問題を避けるにはどうすればよいですか?
あなたの第二の "なぜ?"私はなぜString型の値を 'Map'に入れることができないのですか?答えは "静的型システムがその仕事をしているからです" –
あなたがしようとしていることは、あなたのメソッド 'fillDescriptiveData'は' HashMapを違反である 'HashMap 'に変換し、ジェネリックを使用せず、トマトを変換したい場合は単純にraw型を使用しますニンジンに入れて結果を同じコレクションに入れる –
Map getDescriptiveData(HashMap output、String attributeMapping){...} 'のようなものはどうですか? –
JimmyB