у меня есть массив типа с именем ItinerarySegment
, и этот тип имеет подклассы: WalkSegment
, BusSegment
и т.д.Внедрение Parcelable интерфейс на полиморфных массивов
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
«s конструктор будет вызван.
constructor(Parcel in);
Если я WalkSegment
определить Creator поле, то BusSegment
будет иметь проблемы.
Нужны какие-либо разъяснения?
Я понимаю, что этот комментарий более чем на год позже :-), но да, ваш ответ полезен. Мне было интересно, как Java распаковал полиморфные посылки в правильные типы ... и теперь я понимаю, что это не так. :-(Очень жаль, но заводский подход, который вы предлагаете, должен работать. – dajames