0

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

谢谢

4

0 回答 0