我正在尝试编写一个实现的对象数组 可分包 变成一个 包裹 使用 写可解析数组.

我试图编写的对象定义(如您所期望的)为:

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)不适用于参数(arrival [],int)。推断的类型到达不是有效的限制参数<t扩展包裹>的有效替代品

我完全不明白这个错误信息。 Parcelable 是一个接口(不是类),因此您无法扩展它。有人有主意吗?

更新: 我在放置时遇到了基本相同的问题 ArrayListParcelable变成一个 Intent:

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

产量:

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

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

有帮助吗?

解决方案 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);
}

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top