2015-07-21 139 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个索引处的对象处。

相关问题