`Parcelable.CREATOR` 在抽象类中

huangapple 未分类评论50阅读模式
标题翻译

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&lt;? extends AbstractChannel&gt; mChannels;

    public TvNetwork(String name, ArrayList&lt;? extends AbstractChannel&gt; 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&lt;TvNetwork&gt; CREATOR = new Creator&lt;TvNetwork&gt;() {
        @Override
        public TvNetwork createFromParcel(Parcel in) {
            return new TvNetwork(in);
        }

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

    public ArrayList&lt;? extends AbstractChannel&gt; 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, &lt;? extends AbstractChannel&gt;.class.getClassLoader());

Any ideas?

huangapple
  • 本文由 发表于 2020年5月30日 17:29:33
  • 转载请务必保留本文链接:https://java.coder-hub.com/62100495.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定