我正在尝试使用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)的类型 包裹不适用于 arguments(Arrival [],int)。该 推断类型到达不是有效的 替代有界参数 < T扩展了Parcelable>
我完全不明白这个错误信息。 Parcelable
是一个接口(不是类),因此您无法扩展它。有人有什么想法吗?
更新:将ArrayList
Parcelable
Intent
放入Intent i = new Intent();
i.putParcelableArrayListExtra("locations", (ArrayList<Location>) locations);
时,我遇到的问题基本相同:
Location
的产率:
Intent类型中的方法putParcelableArrayListExtra(String,ArrayList&lt;?extends Parcelable&gt;)不适用于参数(String,ArrayList&lt; Location&gt;)
这可能是因为Arrival
是我上面正在处理的类(包裹{{1}}),但我不这么认为。
答案 0 :(得分:3)
实际上,您可以扩展界面,看起来您需要这样做。 writeParcelableArray中的泛型参数要求扩展接口(而不是接口本身)。尝试创建一个接口MyParcelable扩展Parcelable。然后使用接口声明你的数组,但impl应该是你的Arrival扩展MyParcelable。
答案 1 :(得分: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);
}
答案 2 :(得分:0)
我知道问题已经解决,但我的解决方案是其他的,所以我在这里发布:在我的情况下,Eclipse自动导入错误的包,因为类名称含糊(有些dom.Comment而不是我的Comment类)。