2013-04-29 204 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