6

我正在尝试使用 writeParcelableArray将实现Parcelable的对象数组写入Parcel

我试图写的对象被定义(如你所料)为:

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 尝试编译它时,我得到了错误:

绑定不匹配:Parcel 类型的泛型方法 writeParcelableArray(T[], int) 不适用于参数 (Arrival[], int)。推断类型 Arrival 不是有界参数 < T extends Parcelable > 的有效替代品

我完全不明白这个错误信息。Parcelable是一个接口(不是一个类),所以你不能扩展它。有人有想法么?

更新:ArrayList将of Parcelables 放入 an时,我遇到了基本相同的问题Intent

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

产量:

Intent 类型中的 putParcelableArrayListExtra(String, ArrayList< ? extends Parcelable >) 方法不适用于参数 (String, ArrayList< Location >)

这可能是因为Location是我在上面工作的类(包装了Arrivals),但我不这么认为。

4

3 回答 3

3

实际上,您可以扩展接口,看起来您需要这样做。writeParcelableArray 中的泛型参数要求扩展接口(而不是接口本身)。尝试创建一个接口 MyParcelable 扩展 Parcelable。然后使用接口声明您的数组,但 impl 应该是您的 Arrival 扩展 MyParcelable。

于 2009-12-11T21:14:19.140 回答
2

事实证明它只是想让我构建一个 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);
}
于 2009-12-11T23:22:38.927 回答
-1

我知道问题已经解决,但我的解决方案是其他的,所以我在这里发布:在我的例子中,Eclipse 自动导入了错误的包,因为类名不明确(一些 dom.Comment 而不是我的 Comment 类)。

于 2011-12-10T12:33:25.257 回答