У меня есть класс, который реализовал Parcelable. Могу ли я сделать что-то вроде следующее, чтобы создать новый экземпляр класса ?:Использование паркета для клонирования объекта?
Foo foo = new Foo("a", "b", "c");
Parcel parcel = Parcel.obtain();
foo.writeToParcel(parcel, 0);
Foo foo2 = Foo.CREATOR.createFromParcel(parcel);
я хотел foo2 быть клоном обув.
---------------------- обновление ----------------------- --------
Вышеприведенное не работает (все члены Foo равны нулю в новом экземпляре). Я передаю Foos между действиями очень хорошо, поэтому интерфейс Parcelable реализован в порядке. Использование ниже которой работает:
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.
нашел это из следующего д: How to use Parcel in Android?
Это работает нормально, я могу пойти с этим, но это дополнительный код, не уверен, если есть более короткий путь, чтобы сделать он (кроме правильной реализации конструктора копирования ...).
Благодаря
Хм, да это не хотя - я просто получить объект Foo, но все его члены равны нулю. Тем не менее, я пропускаю экземпляры Foo между действиями. Я использовал фрагмент из другого Q, который, похоже, работает, обновляя вышеуказанный вопрос. – user291701
Ах, извините, я действительно не проверял достоверность кода, просто по понятию его возможно. Однако конструктор копирования определенно будет более эффективным, если вы сделаете это много. –