Открытый конструктор для вложенного класса

85
11

Я разбираю 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 находит конструктор.


Почему конструктор по умолчанию становится видимым после того, как я переместил его в отдельный файл?

спросил(а) 2013-04-29T18:24:00+04:00 7 лет, 8 месяцев назад
1
Решение
84

У меня возникли проблемы с сериализаторами JSON (в частности, Jackson), если мои внутренние классы не являются статическими - очевидно, если ваш внутренний класс не является статическим, конструктор по умолчанию получает недопустимый

ответил(а) 2013-04-29T18:26:00+04:00 7 лет, 8 месяцев назад
133

Поскольку внутренние классы также могут быть общедоступными, частными или защищенными. Если вы не укажете, его частный и не может быть замечен вне класса. Вы должны объявить класс общедоступным.

ответил(а) 2013-04-29T18:25:00+04:00 7 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема