Mam klasę, która zaimplementowała Parcelable. Mogę zrobić coś jak foo2 następujące czynności, aby utworzyć nową instancję klasy ?:Używanie Parcela do klonowania obiektu?
Foo foo = new Foo("a", "b", "c");
Parcel parcel = Parcel.obtain();
foo.writeToParcel(parcel, 0);
Foo foo2 = Foo.CREATOR.createFromParcel(parcel);
Chciałbym być klonem foo.
---------------------- Aktualizacja ----------------------- --------
Powyższe nie działa (wszyscy członkowie Foo mają wartość zerową w nowym wystąpieniu). Przekazuję Foos pomiędzy działaniami w porządku, więc interfejs Parcelable jest zaimplementowany w porządku. Korzystanie z poniżej której działa:
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.
oceniły tę z poniższej Q: How to use Parcel in Android?
To działa ok, mogę iść z tym, ale jest to dodatkowy kod, nie wiem, czy istnieje krótsza droga do zrobienia to (inne niż prawidłowe wdrożenie konstruktora kopii ...).
Dzięki
Hmm tak to nie, choć - po prostu wyjść, ale obiekt Foo wszyscy jego członkowie mają zerową wartość. Przekazuję instancje Foo między różnymi działaniami. Użyłem fragmentu z innego Q, który wydaje się działać, aktualizując powyższe pytanie. – user291701
Ach, przepraszam, że tak naprawdę nie sprawdziłem poprawności kodu, tylko w koncepcji jego ewentualności. Jednak konstruktor kopii byłby zdecydowanie bardziej skuteczny, jeśli robisz to dużo. –