Android中的Parcelable和inheritance

Vin*_*rat 62 java inheritance android design-patterns parcelable

我得到了Parcelable的一个实现,它适用于一个不涉及继承的单个类.在进行继承时,我在确定实现接口的最佳方法时遇到了问题.假设我得到了这个:

public abstract class A {
    private int a;
    protected A(int a) { this.a = a; }
}

public class B extends A {
    private int b;
    public B(int a, int b) { super(a); this.b = b; }
}
Run Code Online (Sandbox Code Playgroud)

问题是,这是为B实现Parcelable接口的推荐方法(在A?中都有??如何?)

Vin*_*rat 82

这是我最好的解决方案,我很乐意听到有人考虑过这个问题.

public abstract class A implements Parcelable {
    private int a;

    protected A(int a) {
        this.a = a;
    }

    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(a);
    }

    protected A(Parcel in) {
        a = in.readInt();
    }
}

public class B extends A {
    private int b;

    public B(int a, int b) {
        super(a);
        this.b = b;
    }

    public static final Parcelable.Creator<B> CREATOR = new Parcelable.Creator<B>() {
        public B createFromParcel(Parcel in) {
            return new B(in);
        }

        public B[] newArray(int size) {
            return new B[size];
        }
    };

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel out, int flags) {
        super.writeToParcel(out, flags);
        out.writeInt(b);
    }

    private B(Parcel in) {
        super(in);
        b = in.readInt();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @CheokYanCheng不,因为A实现它,它意味着B也做(不需要在B声明中重复`implements Parcelable`). (5认同)
  • 你有没有试过在AIDL上传递基类? (4认同)
  • 我们还需要在B类(子类)中实现Parcelable吗? (4认同)