Как переопределить класс в Java?

328
30 июня 2017, 06:01

Есть бибилииотека https://github.com/thoughtbot/expandable-recycler-view

Хочу переопределить класс

public class ExpandableGroup<T extends Parcelable> implements Parcelable {
  private String title;
  private List<T> items;
  public ExpandableGroup(String title, List<T> items) {
    this.title = title;
    this.items = items;
  }
  public String getTitle() {
    return title;
  }
  public List<T> getItems() {
    return items;
  }
  public int getItemCount() {
    return items == null ? 0 : items.size();
  }
  @Override
  public String toString() {
    return "ExpandableGroup{" +
        "title='" + title + '\'' +
        ", items=" + items +
        '}';
  }
  protected ExpandableGroup(Parcel in) {
    title = in.readString();
    byte hasItems = in.readByte();
    int size = in.readInt();
    if (hasItems == 0x01) {
      items = new ArrayList<T>(size);
      Class<?> type = (Class<?>) in.readSerializable();
      in.readList(items, type.getClassLoader());
    } else {
      items = null;
    }
  }
  @Override
  public int describeContents() {
    return 0;
  }
  @Override
  public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(title);
    if (items == null) {
      dest.writeByte((byte) (0x00));
      dest.writeInt(0);
    } else {
      dest.writeByte((byte) (0x01));
      dest.writeInt(items.size());
      final Class<?> objectsType = items.get(0).getClass();
      dest.writeSerializable(objectsType);
      dest.writeList(items);
    }
  }
  @SuppressWarnings("unused")
  public static final Creator<ExpandableGroup> CREATOR =
      new Creator<ExpandableGroup>() {
        @Override
        public ExpandableGroup createFromParcel(Parcel in) {
          return new ExpandableGroup(in);
        }
        @Override
        public ExpandableGroup[] newArray(int size) {
          return new ExpandableGroup[size];
        }
      };
}

Таким образом чтобы можно было сделать конструктор пустым. А переменные

String title, List<T> items добавить через setter.

Моя проблема заключается в List<T>.

Каким образом можно переопределить данный класс чтобы конструктор стал пустым? А то не удобно данные записывать

Не получается переопределить. Как быть?

Answer 1

Каждый конструктор дочернего класса обязан вызывать любой конструктор родителя, независимо от того какие параметры(и есть ли они у него) у этого конструктора.

Вы всегда можете сделать следующий конструктор:

public ExpandableGroupItem {
  super(null, null);
}

Если, конечно, это не вызовет ексепшн в родительском конструкторе

Если вы указали конкретный тип обобщения указывайте его уже везде тогда

private List<Course> list;
READ ALSO
Огромное количество подключений к mongodb

Огромное количество подключений к mongodb

Использую tomcat8, ubuntu 1604, mogodb, при каждом запросе к моему сервлету, делается запрос к базе данных

230
Как отправить сообщение боту в Telegram через java?

Как отправить сообщение боту в Telegram через java?

Подскажите что не так код почему то не работаетВот мой код: curl "https://api

800
Как убрать автоподставку комментария git

Как убрать автоподставку комментария git

Как в Intellije Idea убрать автоподставку комментария при коммите?

321