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 ofParcelableIntent:に入れるときに、基本的に同じ問題が発生しています。

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 extends MyParcelable である必要があります。

于 2009-12-11T21:14:19.140 に答える
-1

問題が解決したことはわかっていますが、私の解決策は他のものだったので、ここに投稿します。私の場合、Eclipse はクラス名のあいまいさ (Comment クラスではなく dom.Comment) のために間違ったパッケージを自動的にインポートしました。

于 2011-12-10T12:33:25.257 に答える