我有一个实现了Parcelable的类。我可以这样做下面创建一个类?:的新实例使用包来克隆一个对象?
Foo foo = new Foo("a", "b", "c");
Parcel parcel = Parcel.obtain();
foo.writeToParcel(parcel, 0);
Foo foo2 = Foo.CREATOR.createFromParcel(parcel);
我想foo2的是富的克隆。
---------------------- update ----------------------- --------
上述不起作用(所有Foo成员在新实例中都为null)。我在活动之间传递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 2010-09-22 20:43:29
啊,对不起,我没有真正检查代码的有效性,只是在概念上它的possbile。但是,如果你做了很多工作,复制构造函数肯定会更有效率。 – 2010-09-22 20:59:23