Parcelable.CREATOR в абстрактном классе - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь передать ArrayList неизвестного типа класса, который расширяет абстрактный класс, другому действию с помощью Parcelable. Поскольку невозможно использовать Parcelable.CREATOR в абстрактном классе, при попытке создать ArrayList возникает ошибка: in.readTypedList (AbstractChannel.CREATOR), см. Ниже:

public class TvNetwork implements Parcelable {
    public String name;
    public ArrayList<? extends AbstractChannel> mChannels;

    public TvNetwork(String name, ArrayList<? extends AbstractChannel> channels) {
        this.name = name;
        this.mChannels = channels;
    }

    protected TvNetwork(Parcel in) {
        name = in.readString();
        mChannels = in.readTypedList(AbstractChannel.CREATOR); // here is the error
    }

    public static final Creator<TvNetwork> CREATOR = new Creator<TvNetwork>() {
        @Override
        public TvNetwork createFromParcel(Parcel in) {
            return new TvNetwork(in);
        }

        @Override
        public TvNetwork[] newArray(int size) {
            return new TvNetwork[size];
        }
    };


    public ArrayList<? extends AbstractChannel> getChannels() {
        return mChannels;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeTypedList(mChannels);
    }

}

Кажется, что запись работать, но не читать. Это, очевидно, тоже не работает, но объясняет немного больше, что я хочу сделать:

in.readTypedList(mChannels, <? extends AbstractChannel>.class.getClassLoader());

Есть идеи?

...