我是java新的泛型,面臨以下問題。 我也有類似的方法,爲什麼HashMap <String,Object>不接受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);
}
}
現在,如果我叫API如下方式
HashMap<String, Object> ObjectMap = new HashMap<String, Object>();
HashMap<String, List> listMap = new HashMap<String, List>();
fillDescriptiveData(ObjectMap,"here");
這一項工作的罰款。fillDescriptiveData(listMap,"here");
此呼叫給出錯誤
方法fillDescriptiveData(HashMap中,字符串)在類型CustomAttribute不適用於參數(HashMap中,字符串)`
爲什麼?
在行來解決這個問題,我有一個更多的問題遇到,在線
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不適用於 的參數(字符串)
爲什麼?
避免此問題的最佳方法是什麼?
你的第二個 「爲什麼?」問:「爲什麼我不能在字符串中放置一個字符串作爲值,答案是」因爲靜態類型系統正在完成它的工作「 –
反正你試圖做的顯然是壞的,你的方法'fillDescriptiveData'將你的'HashMap'轉換爲'HashMap '這顯然是違規的,那麼不要使用泛型,如果你想轉換一個番茄成一個胡蘿蔔,並把結果放入同一個集合 –
如何處理像'Map getDescriptiveData(HashMap output,String attributeMapping){...}'? - 此外,您的問題標題是誤導性的,你可能想編輯它 –
JimmyB