我有一个抽象类 A
,它实现了 Parcelable 接口。
我有两个类 B
和 C
,它们都继承自 A
。如何使它们可被序列化?
当然,我可以像许多帖子中建议的那样,在 A
和 B
中都提供一个 CREATOR
,并将它们链接起来。但是,由于我有其他存储 A-B-C
类的对象,并且它们本身实现了 Parcelable 接口,所以这种方法似乎行不通,因为当我想传递一个 A
的 ArrayList 时,我必须在类型化列表中使用 CREATOR
。
ArrayList<A> elements = new ArrayList<>();
in.readTypedList(elements , B.CREATOR); // B.CREATOR? C.CREATOR???
显然这没有任何意义。那么我该如何正确地使A成为可 Parcelable 的呢?
即我想要将这个类变成 Parcelable,以便可以以通用的方式引用 A。
A)
public abstract class A implements Parcelable {
final String globalVar;
public A(String globalVar) {
this.globalVar = globalVar;
}
}
B)
public class B extends A {
String bVar;
public B(String global, String bVar) {
super(global);
this.bVar = bVar;
}
private B(Parcel in) {
super(in.readString());
this.bVar = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(bVar);
}
}
C)
public class C extends A {
String cVar;
public C(String global, String cVar) {
super(global);
this.cVar = cVar;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(cVar);
}
}
Parcel
为参数的构造函数。B和C必须调用super.writeToParcel(...)
和super(in)
。 - Blackbelt