2015-07-21 138 views
3

我試圖從bean列表中只替換選定索引的地圖細節,但它替換了包含相同鍵的每個列表對象的所有值。如果我在創建新的對象之前創建新的值,那麼它工作正常,但我想知道爲什麼下面的代碼行爲不當。地圖替換列表對象的所有相同的鍵值

public static void main(String[] args) { 

    List<PolicyAddlnInsuredBean> lst = new ArrayList<PolicyAddlnInsuredBean>(); 
    PolicyAddlnInsuredBean pb = new PolicyAddlnInsuredBean(); 
    Map<String, Map<String, Object>> epInfoMap = new HashMap<String, Map<String,Object>>(); 

    Map<String,Object> map = new HashMap<String, Object>(); 
    map.put("addtlnInsReqd", "YES"); 
    map.put("selectedFlg", "No"); 
    epInfoMap.put("AL", map); 
    pb.setEpInfoMap(epInfoMap); 
    lst.add(pb); 

    epInfoMap = new HashMap<String, Map<String,Object>>(); 
    map = new HashMap<String, Object>(); 
    map.put("addtlnInsReqd", "YES"); 
    map.put("selectedFlg", "No"); 
    epInfoMap.put("AL", map); 
    pb.setEpInfoMap(epInfoMap); 
    lst.add(pb); 

    lst.get(0).getEpInfoMap().get("AL").put("selectedFlg", "Yes"); 
    System.out.println(lst); 
} 

我的POJO類:

public class PolicyAddlnInsuredBean{ 

    private Map<String,Map<String,Object>> epInfoMap =new HashMap<String, Map<String,Object>>(); 

    public Map<String, Map<String, Object>> getEpInfoMap() { 
    return epInfoMap; 
    } 
    public void setEpInfoMap(Map<String, Map<String, Object>> epInfoMap) { 
    this.epInfoMap = epInfoMap; 
    } 
    @Override 
    public String toString() { 
     return "PolicyAddlnInsuredBean [epInfoMap=" + epInfoMap + "]"; 
    } 

} 
+0

它是如何行事不端?預期的結果是什麼,實際打印的是什麼? –

回答

5

只有一個pb對象,加兩次lst(原則: 「檢查new S」)。

+0

謝謝,現在我很清楚。它指的是相同的對象,所以更新所有的值。 –

0

相同的pb對象被添加兩次到列表中。因此,即使當您在第0個索引處更改pb對象,該更改也會反映在第1個索引處的對象處。

相關問題