这是一个一般的JAVA问题。在android中,有一个界面Parcelable
:
这是官方文档中的一个示例:
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
我们需要实现 2 个功能describeContents()
和writeToParcel
.
(问题)
除此之外,我们还需要将Parcelable.Creator<T>
接口实现为一个名为 CREATOR 的静态字段。
一切实际上都是直截了当的。现在我想创建一个具有 Parcelable 类类型的通用类:
public class ShushContainer<T extends Parcelable> implements Parcelable
我能够实现 Parcelable。我可以调用T
'swriteToParcel
函数。但是,我无法访问静态 CREATOR 字段。
public class ShushContainer<T extends Parcelable> implements Parcelable {
Vector<T> items;
String someField;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(someField);
dest.writeInt(items.size());
for(int i=0;i<items.size();i++)
items.get(i).writeToParcel(dest, flags);
}
public ShushContainer(Parcel in) {
someField = in.readString();
int size = in.readInt();
for(int i=0;i<size;i++)
//this does not work
items.add(T.CREATOR.createFromParcel(in));
}
public static final Parcelable.Creator<ShushContainer> CREATOR = new Parcelable.Creator<ShushContainer>() {
public ShushContainer createFromParcel(Parcel in) {
return new ShushContainer(in);
}
public ShushContainer[] newArray(int size) {
return new ShushContainer[size];
}
};
}