Verwenden Sie Parcel, um ein Objekt zu klonen?

Ich habe eine Klasse, die Parcelable implementiert hat. Kann ich wie folgt vorgehen, um eine neue Instanz einer Klasse zu erstellen?

Foo foo = new Foo("a", "b", "c");

Parcel parcel = Parcel.obtain();
foo.writeToParcel(parcel, 0);
Foo foo2 = Foo.CREATOR.createFromParcel(parcel);

Ich möchte, dass foo2 ein Klon von foo ist.

---------------------- Update -------------------------- -----

Das oben genannte funktioniert nicht (alle Foo-Mitglieder sind in einer neuen Instanz null). Ich übergebe Foos zwischen Aktivitäten ganz gut, so dass die Parcelable-Schnittstelle in Ordnung implementiert ist. Verwenden Sie das Folgende, was funktioniert:

Foo foo1 = new Foo("a", "b", "c");
Parcel p1 = Parcel.obtain();
Parcel p2 = Parcel.obtain();
byte[] bytes = null;

p1.writeValue(foo1);
bytes = p1.marshall();

p2.unmarshall(bytes, 0, bytes.length);
p2.setDataPosition(0);
Foo foo2 = (Foo)p2.readValue(Foo.class.getClassLoader());

p1.recycle();
p2.recycle();

// foo2 is the same as foo1.

fand dies aus dem folgenden q:Wie verwende ich Parcel in Android?

Dies funktioniert in Ordnung, ich kann damit weitermachen, aber es ist zusätzlicher Code, nicht sicher, ob es einen kürzeren Weg gibt, dies zu tun (außer einen Kopierkonstruktor richtig zu implementieren ...).

Vielen Dan

Antworten auf die Frage(6)

Ihre Antwort auf die Frage