使用Cloneable接口克隆复杂对象

时间:2015-07-20 14:30:08

标签: java android clone cloning cloneable

我正在尝试使用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这样的复杂对象在没有深度克隆的情况下被克隆?我怀疑我没有正确地做到这一点,并且我会在不久的将来发现错误。

由于

0 个答案:

没有答案