Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何克隆地块对象_Android_Clone_Parcelable_Cloneable_Parcel - Fatal编程技术网

Android 如何克隆地块对象

Android 如何克隆地块对象,android,clone,parcelable,cloneable,parcel,Android,Clone,Parcelable,Cloneable,Parcel,我要克隆地块对象(不可地块) 我无法使用clone()方法,因为它受保护。我也不能使用反射来调用它,因为Parcel类不实现“clonable” 我尝试执行问题的解决方案: 但它不适用于地块类型本身,原因是没有为地块类型本身定义“writeToParcel”。因此,对于对象“Parcel a”,a.writeToParcel(Parcel,0)将不会编译。您可以通过编组/解编组来完成此操作 byte[] rawData = original.marshall(); Parcel clone =

我要克隆地块对象(不可地块)

我无法使用clone()方法,因为它受保护。我也不能使用反射来调用它,因为Parcel类不实现“clonable”

我尝试执行问题的解决方案:
但它不适用于地块类型本身,原因是没有为地块类型本身定义“writeToParcel”。因此,对于对象“Parcel a”,a.writeToParcel(Parcel,0)将不会编译。

您可以通过编组/解编组来完成此操作

byte[] rawData = original.marshall();
Parcel clone = Parcel.obtain();
clone.unmarshall(rawData, 0, rawData.length);
clone.setDataPosition(original.dataPosition());

但这并不适用于所有包裹。我认为它在带有活动对象的包裹上失败,但我还没有测试以确保。

使用
packet.appendFrom()

这比编组和解编组效率更高,而且不会丢失有关包中对象引用或
FileDescriptor
s的任何数据


来源:无意中听到安卓框架开发人员谈到这一点,并决定更新Stackoverflow问题。

否决投票,因为这是一个不完整的解决方案,而且没有真正的性能。包裹是要走的路。