繁体   English   中英

如何克隆android中的对象?

[英]how to clone an object in android?

在java / android中复制/克隆对象的最佳方法是什么?

rlBodyDataObj rlbo = bdoTable.get(name);

现在代码从hashTable中分配一个对象,但我需要克隆它,这样我就能多次使用它。

确保您的DataObj类实现Cloneable并添加以下方法

protected Object clone() throws CloneNotSupportedException {
        return super.clone();
}

然后你应该能够调用(DataObj)rlBodyDataObj.clone(); 得到一个干净的副本(注意演员表)。

class Test implements Cloneable
  {
   ...
      public Object clone()
      {
          try
      {
              return super.clone();
          }
      catch( CloneNotSupportedException e )
      {
              return null;
          }
      } 
  ...
  }

你可以实现Parcelable(简单的工作室插件),然后

public static <T extends Parcelable> T copy(T orig) {
    Parcel p = Parcel.obtain();
    orig.writeToParcel(p, 0);
    p.setDataPosition(0);
    T copy = null;
    try {
        copy = (T) orig.getClass().getDeclaredConstructor(new Class[]{Parcel.class}).newInstance(p);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return copy;
}

有时您需要在从clone()方法返回之前修改某些字段。

请查看: http//docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#clone ()。 为方便起见,我在这里粘贴了相关部分:

“按照惯例,此方法返回的对象应独立于此对象(正在克隆)。为了实现此独立性,可能需要在返回之前修改super.clone返回的对象的一个​​或多个字段。通常,这意味着复制任何包含被克隆对象的内部“深层结构”的可变对象,并用对副本的引用替换对这些对象的引用。如果一个类只包含原始字段或对不可变对象的引用,则它是通常情况下,super.clone返回的对象中没有字段需要修改。“

您必须在类上指定它实现Cloneable接口,并且必须覆盖该类中的clone方法。 默认情况下,它将使用Object类的clone方法。

我希望实现: 复制构造函数

class DataObj {
  private String tag;

  public DataObj(DataObj another) {
    this.tag= another.tag; // you can access  
    ...
  }
}

每个对象都有一个可用于复制对象的克隆方法,但创建一个类并执行不正确的克隆方法太容易了。 如果您要使用实现克隆方法,请至少阅读Joshua Bloch在Effective Java中对此所说的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM