編輯:我有sharp
和rect
混淆的名字,所以我換他們,以避免混亂
你只需要實現這樣的:
public static final Parcelable.Creator<Rect> CREATOR
= new Parcelable.Creator<Rect>() {
public Rect createFromParcel(Parcel in) {
return new Rect(in);
}
public Rect[] newArray(int size) {
return new Rect[size];
}
};
你是不是壓倒一切Sharp
中的字段,因爲靜態字段不能被覆蓋。你是隱藏該字段。這意味着,如果有人寫:
Parcelable.Creator<Rect> creator = Rect.CREATOR;
他們得到不同的對象比,如果有人寫道:
Parcelable.Creator<Sharp> creator = Sharp.CREATOR;
注:我把你的資本類名Rect
和Sharp
的自由。你也應該這樣做。它會讓你的生活更輕鬆,你的代碼看起來更加像Java ;-)
編輯:添加一些額外的說明後OP的評論
我想我看到你的問題。您想定義一個接口,該接口傳遞一個Sharp
對象,但您確實想要傳遞派生的Rect
對象,並且此對象在接收端重新創建爲Sharp
對象。它看起來像AIDL不支持這種繼承。但是,你可以做的是這樣的(-窮人的工廠):
在Rect
:
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(getClass().getName());
// Write other instance variables
}
在Sharp
:
public static final Parcelable.Creator<Sharp> CREATOR
= new Parcelable.Creator<Sharp>() {
public Sharp createFromParcel(Parcel in) {
String derivedClassName = in.readString();
if (derivedClassName.equals(Rect.class.getName()) {
// Create an instance of Rect and return that
return new Rect(in);
} else if (derivedClassName.equals(...) {
// Possible other derived classes
}
}
public Sharp[] newArray(int size) {
return new Sharp[size];
}
};
注意構造
public Rect(Parcel in)
將被調用類名字符串已經從公司刪除oming Parcel
。
是否允許使用Serializable而不是Parcelable?可序列化非常容易實現。 – mtmurdock 2012-07-24 15:30:31