Java克隆项目从一个ArrayList到另一个ArrayList?

Java克隆项目从一个ArrayList到另一个ArrayList?,java,android,Java,Android,我试图将元素从一个arrayList复制到另一个arrayList,我的应用程序中开始出现错误,我认为问题在于我做的是浅拷贝 ResolveInfo r1 = new ResolveInfo(); Parcel p = Parcel.obtain(); r1.writeToParcel(p, 0); ResolveInfo r2 = ResolveInfo.CREATOR.createFromParcel(p); 如何将项目从一个阵列添加到另一个阵列中进行深度复制/克隆 ResolveInfo

我试图将元素从一个arrayList复制到另一个arrayList,我的应用程序中开始出现错误,我认为问题在于我做的是浅拷贝

ResolveInfo r1 = new ResolveInfo();
Parcel p = Parcel.obtain();
r1.writeToParcel(p, 0);
ResolveInfo r2 = ResolveInfo.CREATOR.createFromParcel(p);
如何将项目从一个阵列添加到另一个阵列中进行深度复制/克隆

ResolveInfo r1 = new ResolveInfo();
Parcel p = Parcel.obtain();
r1.writeToParcel(p, 0);
ResolveInfo r2 = ResolveInfo.CREATOR.createFromParcel(p);
到目前为止,我是这样复制元素的:

public ArrayList<ResolveInfo> myAppsArr = new ArrayList(); 
public ArrayList<ResolveInfo> allAppsArr = new ArrayList(); 

    myAppsArr.add(allAppsArr.get(0));
ResolveInfo r1 = new ResolveInfo();
Parcel p = Parcel.obtain();
r1.writeToParcel(p, 0);
ResolveInfo r2 = ResolveInfo.CREATOR.createFromParcel(p);
public ArrayList myAppsArr=new ArrayList();
public ArrayList allAppsArr=新的ArrayList();
myAppsArr.add(allAppsArr.get(0));
如何将项目从一个阵列添加到另一个阵列中进行深度复制/克隆

ResolveInfo r1 = new ResolveInfo();
Parcel p = Parcel.obtain();
r1.writeToParcel(p, 0);
ResolveInfo r2 = ResolveInfo.CREATOR.createFromParcel(p);
ResolveInfo具有可为您创建新的重复对象的:

myAppsArr.add(new ResolveInfo(allAppsArr.get(0)));
ResolveInfo r1 = new ResolveInfo();
Parcel p = Parcel.obtain();
r1.writeToParcel(p, 0);
ResolveInfo r2 = ResolveInfo.CREATOR.createFromParcel(p);

此构造函数似乎仅在API 17中添加,您可以尝试通用克隆方法:

myAppsArr.add(allAppsArr.get(0).clone()); // No promises, I haven't tested this myself
ResolveInfo r1 = new ResolveInfo();
Parcel p = Parcel.obtain();
r1.writeToParcel(p, 0);
ResolveInfo r2 = ResolveInfo.CREATOR.createFromParcel(p);

或者,您可以创建一个方法,手动创建一个新的ResolveInfo对象,因为所有成员数据都是公共的。

对于所有android版本,最简单、最可靠的方法是将ResolveInfo序列化到parcel,并从该parcel创建新的ResolveInfo实例

ResolveInfo r1 = new ResolveInfo();
Parcel p = Parcel.obtain();
r1.writeToParcel(p, 0);
ResolveInfo r2 = ResolveInfo.CREATOR.createFromParcel(p);

是的,那只是复制参考资料。你不确定吗?”我想问题是我做的是肤浅的复制。在开始进行深度复制之前,您应该确保。您应该使用ResolveInfo类的复制构造函数