という名前の型の配列がありItinerarySegment
、この型にはサブクラスがあります:WalkSegment
などBusSegment
。
public interface ItinerarySegment
{
}
public class WalkSegment implements ItinerarySegment
{
}
public class BusSegment implements ItinerarySegment
{
}
ItinerarySegment
parcelableの配列を作成する場合、どのような戦略に従う必要がありますか? ここでの主な関心事は、createTypedArrayメソッド ( writeTypedArrayメソッドによって準備される) を介して配列を再構築するときに後でどのように使用されるかということです。
ここで、createTypedArrayメソッドはCreatorフィールド パラメータを受け取ります。ここに問題があります... Creatorフィールドはどこに定義する必要がありますか? ( ItinerarySegment
、WalkSegment
、またはBusSegment
?)。
public static final Creator<Typename> CREATOR = new Parcelable.Creator<Typename>()
{
public Typename createFromParcel(Parcel in)
{
return new Typename(in);
}
public Typename[] newArray(int size)
{
return new Typename[size];
}
};
ItinerarySegment
抽象クラスを作成して Creator フィールドのメソッドを定義すると、後続のサブクラスのデータが失われます。これは、Parcel パラメーターを使用してコンストラクターが呼び出されず、代わりにItinerarySegment
のコンストラクターが呼び出されるためです。
constructor(Parcel in);
CreatorフィールドをWalkSegment
定義すると、問題が発生します。BusSegment
明確化が必要ですか?