标题翻译
Parcelable.CREATOR on abstract class
问题
我正在尝试传递一个未知类类型的继承自抽象类的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); // 这里是错误的地方
}
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());
有任何想法吗?
英文翻译
I'm trying to pass an ArrayList of unknown class type that extend an abstract class, to another activity using Parcelable. Since its not possible to use Parcelable.CREATOR on the abstract class, there is an error when I try to create the ArrayList: in.readTypedList(AbstractChannel.CREATOR), see below:
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);
}
}
Writing seems to work but not reading. This obviously does not work either, but explains a bit more what I want to do:
in.readTypedList(mChannels, <? extends AbstractChannel>.class.getClassLoader());
Any ideas?
专注分享java语言的经验与见解,让所有开发者获益!
评论