我有这样一个类
class elem{
List<elem> child ;
.......
}
我想实现深度复制,重写clone方法
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
Elem e = null;
e = (Elem)super.clone();
e.children = new ArrayList<Elem>();
for(int i=0;i<e.children.size();i++){
Elem temp = (Elem)children.get(i).clone();
e.children.add(temp);
}
return e;
}
我想处理多层嵌套的情况,可是上面那个根本没有起作用。求解决方法。
class elem{
List<elem> child ;
.......
}
我想实现深度复制,重写clone方法
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
Elem e = null;
e = (Elem)super.clone();
e.children = new ArrayList<Elem>();
for(int i=0;i<e.children.size();i++){
Elem temp = (Elem)children.get(i).clone();
e.children.add(temp);
}
return e;
}
我想处理多层嵌套的情况,可是上面那个根本没有起作用。求解决方法。
// TODO Auto-generated method stub
Elem e = null;
e = (Elem)super.clone();
if(e.children!=null){
List<elem> tempList = new ArrayList<Elem>();
for(int i=0;i<e.children.size();i++){
Elem temp = (Elem)children.get(i).clone();
tempList.add(temp);
}
e.children = tempList;
}
return e;
}
new JSONDeserializer().deserialize(new JSONSerializer().deepSerialize(object))
===========================
如果要完全深度复制,还是用objectinputstream/objectoutputstream对象流,处理吧。
Elem e new Elem();
e.children = new ArrayList<Elem>();
for (Elem child : this.children)
e.children.add(child.clone());
return e;
}你的方法里,注意这两行:
e.children = new ArrayList<Elem>();
for(int i=0;i<e.children.size();i++){e.children是一个新的ArrayList,所以下面这个循环没有效果