Запись массивов Parcelables на парцеллу в Android

Я пытаюсь написать массив объектов, которые реализуют Parcelable в Parcel, используя writeParcelableArray.

Объекты, которые я пытаюсь записать, определяются (как и ожидалось) как:

public class Arrival implements Parcelable {
    /* All the right stuff in here... this class compiles and acts fine. */
}

И я пытаюсь записать их в "Посылку" с помощью:

@Override
public void writeToParcel(Parcel dest, int flags) {
    Arrival[] a;
    /* some stuff to populate "a" */
    dest.writeParcelableArray(a, 0);
}

Когда Eclipse пытается скомпилировать это, я получаю ошибку:

Связанное несоответствие: общий метод writeParcelableArray (T [], int) типа Посылка не применяется для аргументы (Прибытие [], int). inferred type Прибытие недействительно замените ограниченный параметр < T расширяет Parcelable >

Я полностью не понимаю это сообщение об ошибке. Parcelable - это интерфейс (а не класс), поэтому вы не можете его расширять. У кого-нибудь есть идеи?

ОБНОВЛЕНИЕ: У меня в основном такая же проблема, когда ArrayList Parcelable помещается в Intent:

Intent i = new Intent();
i.putParcelableArrayListExtra("locations", (ArrayList<Location>) locations);

дает:

Метод putParcelableArrayListExtra (String, ArrayList <? extends Parcelable > ) в типе Intent не применим для аргументов (String, ArrayList <Location> )

Это может быть связано с тем, что Location был классом, над которым я работал выше (который обертывает Arrival s), но я так не думаю.

Ответ 1

Оказывается, он просто хотел, чтобы я создал массив Parcelables. Чтобы использовать пример из вопроса:

@Override
public void writeToParcel(Parcel dest, int flags) {
    Parcelable[] a;
    /* 
        some stuff to populate "a" with Arrival 
        objects (which implements Parcelable) 
    */
    dest.writeParcelableArray(a, 0);
}

Ответ 2

На самом деле вы можете расширить интерфейс, и похоже, что вам нужно сделать именно это. Параметр generics в writeParcelableArray запрашивает расширенный интерфейс (а не сам интерфейс). Попробуйте создать интерфейс MyParcelable расширяет Parcelable. Затем объявляя ваш массив с помощью интерфейса, но имплант должен быть вашим Прибытием расширяет MyParcelable.

Ответ 3

Я знаю, что проблема решена, но мое решение было другим, поэтому я размещаю его здесь: в моем случае Eclipse автоматически импортировал неправильный пакет из-за несовместимости имен классов (некоторые dom.Comment вместо моего класса Comment).