2016-10-26 64 views
0

我有以下對象:在對象中填充HashMap時的NPE?

public class PersonDTO { 

    private Map<String, String> idsAndNames; 

    //default constructor 
    public PersonDTO() { 
    } 

    public PersonDTO(Map<String, String> idsAndNames) { 
     this.idsAndNames = idsAndNames; 
    } 

    public void setIdsAndNames(Map<String, String> idsAndNames) { 
     this.idsAndNames = idsAndNames; 
    } 

    public Map<String, String> getIdsAndNames() { 
     return idsAndNames; 
    } 


    public void addEntryToMap(String id, String name) { 
     this.idsAndNames.put(id, name); 
    } 

} 

每當我試着填充物內的map(參見下面的方法),我得到一個Null Pointer Exception說,Mapnull。我怎樣才能解決這個問題?

方法來填充(內主類)對象:

public PersonDTO populatePersonDTO(List<String> ids, List<String> names){ 

     Map<String, String> idsAndNames = new HashMap<>(); 
     PersonDTO personDTO = new PersonDTO(); 
     personDTO.setIdsAndNames(idsAndNames); 

     for(int i=0;i<ids.size();i++){ 

      personDTO.addEntryToMap(ids.get(i),names.get(i)); //line throwing NPE 
     } 
     return personDTO; 
    } 

調用populatePersonDTO:

List<String> ids= Arrays.asList("1", "2", "3"); 
List<String> names= Arrays.asList("name1", "name2", "name3"); 

populatePersonDTO(ids, names); 
+0

什麼是空指針異常的完整堆棧跟蹤? –

+1

發佈的代碼必須與您正在運行的代碼不同(或者問題不在您發佈的代碼中)。我試圖按照原樣複製你的'PersonDTO',並將'populatePersonDTO'作爲同一類的靜態方法添加。當我使用與你發佈的相同片段的主叫方時,一切正常。 – Eran

回答

1

如果NPE線上的點到populatePersonDTO,然後names是一個被空(ids不能因爲我們打電話ids.size()沒有問題)。如果是idsAndNames,NPE將指向addEntryToMap。因此請確保names不爲空。

+0

問題在於PersonDTO中的idsAndNames映射爲空,但我無法解決原因? – java123999