我正在使用包裹對象將值從一個過程傳遞到另一個過程。我想創建一個包裹對象的克隆,但我無法使用clone()方法如果有人知道如何創建包裹副本,請提供解決方案。創建包裹對象的副本
3
A
回答
5
假設你的對象實現了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);
15
建議的解決方案是不完整的,並且將無法正常工作。
這裏有一個工作的解決方案:
(我有一個名爲類型MessageDescriptor的消息,我想克隆一個對象)
Parcel parcel = Parcel.obtain();
message.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
MessageDescriptor messageToBeSent = MessageDescriptor.CREATOR.createFromParcel(parcel);
parcel.recycle();
0
也爲拷貝構造函數是有用的。
/**
* 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();
}
相關問題
- 1. 如何創建對象的副本?
- 2. 包裹costum的陣列對象對象
- 3. 宣言對象爲其創建被包裹在宏
- 4. HashSet包含對象的副本
- 5. 創建對象本身的新副本的一些新特性
- 6. 創建副本
- 7. Convert.ChangeType()是否創建對象的副本或返回原始對象的引用?
- 8. 如何創建未鏈接到原始對象的python對象的副本?
- 9. 如何創建未連接到原始對象的對象的副本
- 10. 如何在C#中創建對象的引用副本?
- 11. 是否存在無法創建深層副本的對象?
- 12. 問題:多到一,它創建的副本對象
- 13. 創建一個遊戲對象的副本
- 14. 如何創建File對象的獨立完整副本?
- 15. 如何創建自定義對象或集合的副本?
- 16. 如何在不創建副本的情況下返回對象?
- 17. 用C++創建一個對象的副本
- 18. 創建一個ASP.NET控件對象的副本
- 19. 如何在JavaScript中創建File對象的修改副本?
- 20. 在C++中創建沒有RVO的對象和副本ctors
- 21. findOrCreate創建副本
- 22. Sed創建副本
- 23. Shippo中的包裹對象值?
- 24. 創建集合的副本
- 25. 創建副本的js
- 26. 創建NSObject的副本
- 27. 在創建防禦副本時創建新對象而不是克隆
- 28. 用包裹對象寫數據
- 29. MultipartFormData包裹在裏面對象
- 30. .clone()創建多個副本