我正在尝试使用Cloneable接口克隆复杂对象。
我有一个名为Resource的超级对象,它有两个字段:
public class Resource implements Cloneable{
protected String name;
protected boolean isOnline;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
此类CollectionResource扩展了具有复杂字段的Resource,例如Cursor,HashMap,DBHelper ......等等:
public class CollectionResource extends Resource{
DbHelper myDb;
Cursor currentCursor;
Cursor tmpCursor;
HashMap<String, FieldType> fieldsTypes=null;
private String currenViewName;
private String currentDateField;
boolean datesetMode=false;
public boolean singleRowMode=false;
private int lastId=-2;
int retainCount=0;
public double lasEditTime=0;
@Override
public Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
}
我需要克隆CollectionResource的一个实例,因为我需要使用不同的实例,所以我试着简单地这样做:
try {
this.collection = (CollectionResource) collectionToClone.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
它似乎工作......但我不明白为什么,因为我在ResourceCollection中使用复杂的对象,我没有在我的源代码上实现任何类型的深度克隆...
为什么没有深度克隆就能正常工作?为什么像DBHelper,HashMap,Cursor这样的复杂对象在没有深度克隆的情况下被克隆?我怀疑我没有正确地做到这一点,并且我会在不久的将来发现错误。
由于