创建包裹对象的副本
答
假设你的对象实现了Parcelable
接口,你应该能够做到以下几点:
SomethingParcelable myObject = new SomethingParcelable();
Parcel p = Parcel.obtain();
myObject.writeToParcel(p, 0);
//must be called after unmarshalling your data.
p.setDataPosition(0);
SomethingParcelable myClonedObject = SomethingParcelable.CREATOR.createFromParcel(p);
答
建议的解决方案是不完整的,并且将无法正常工作。
这里有一个工作的解决方案:
(我有一个名为类型MessageDescriptor的消息,我想克隆一个对象)
Parcel parcel = Parcel.obtain();
message.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
MessageDescriptor messageToBeSent = MessageDescriptor.CREATOR.createFromParcel(parcel);
parcel.recycle();
答
也为拷贝构造函数是有用的。
/**
* Copy request passed in.
*
* @param request Request To clone, null is accepted, just creates a blank object
*/
public RealTimeJourneyPlanRequest(@Nullable RealTimeJourneyPlanRequest request) {
if(request == null) return;
// Only copy if the request past in is not null
// Use the Parcel as its does deep cloning for us.
final Parcel parcel = Parcel.obtain();
request.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
// Copy into this object
readFromParcel(parcel);
// Clean parcel back into object pool
parcel.recycle();
}