Я пытаюсь передать 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());
Любые идеи?