2013-04-29 203 views
3

我解析一個JSON並碰到一個異常,說我沒有默認構造函數爲我的一個實體。下面是代碼:嵌套類的公共構造函數

public class MyPromosResponse extends BaseResponse { 

    public MyPromosResponseData response; 

    public MyPromosResponse() { 
    } 

    public TreeSet<Promo> getMyPromosResponseData() { 
     return new TreeSet<Promo>(response.getEvents()); 
    } 

    @JsonIgnoreProperties(ignoreUnknown = true) 
    class MyPromosResponseData { 
     public ArrayList<Promo> events; 
     public ArrayList<Table1PromoData> Table1; 

     public MyPromosResponseData() { 
     } 

     public ArrayList<Promo> getEvents() { 
      return events; 
     } 

     ArrayList<Table1PromoData> getTable1() { 
      return Table1; 
     } 

    } 

    class Table1PromoData { 
     public int id; 
     public int eventid; 
     public int cardholderid; 

     public Table1PromoData() { // Here is the constructor. 
     } 

     public int getId() { 
      return id; 
     } 

     public void setId(int id) { 
      this.id = id; 
     } 

     public int getEventid() { 
      return eventid; 
     } 

     public void setEventid(int eventid) { 
      this.eventid = eventid; 
     } 

     public int getCardholderid() { 
      return cardholderid; 
     } 

     public void setCardholderid(int cardholderid) { 
      this.cardholderid = cardholderid; 
     } 
    } 

} 

當我有Table1PromoData作爲一個嵌套類我有默認的構造函數不能發現該錯誤,但有定義的公共構造。如果我將它移動到一個單獨的文件,一切都很好 - 該lib找到構造函數。

爲什麼默認的構造函數在我將其移動到單獨的文件後變爲可見?

+2

讓您的嵌套類' static'。 – 2013-04-29 15:25:58

+0

@Sotirios,謝謝,它在我將它設置爲靜態後起作用。 – Eugene 2013-04-29 15:32:24

+0

@silk不客氣,請查看Zim-Zam的回答。 – 2013-04-29 15:34:14

回答

3

我碰到與JSON序列化(特別是傑克遜)如果我的內部類不是靜態的問題 - 顯然,如果你的內部類是不是靜態的,則默認的構造函數將被打亂了

9

因爲內部類也可以是公共的,私人的或受保護的。如果你沒有指定,它是私人的,不能在課堂以外看到。你需要聲明這個類是公開的。

+0

聽起來很合理,但直到我將它設置爲「靜態」後纔有所幫助。 – Eugene 2013-04-29 15:30:27