[英]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.