java中,除了基本数据类型和String之外,其他对象的赋值都是传递地址。
为了使对象可以传递值(不愿意改变源地址),需要使用到克隆。克隆又分为浅克隆和深克隆。浅克隆不能克隆对象,只能克隆基本的数据类型和String,所以如果我们的需要克隆的对象中包涵其他对象的引用,那么就需要使用深克隆。如下所示就是深度克隆:
public class ResGroup implements Cloneable {
public String Color;// 眼色 (两种颜色 ,0 1)
public String GroupId;// 一个分组的ID
public String GroupName;// 分组的名称
public String GroupCount;// 分组控件的数量
public List<GroupItem> GroupItems = new ArrayList<GroupItem>();// 分组控件
@Override
public String toString() {
return "ResGroup [Color=" + Color + ", GroupId=" + GroupId + ", GroupName=" + GroupName + ", Spans=" + Spans + ", Icon=" + Icon + ", GroupCount=" + GroupCount + ", GroupItems=" + GroupItems + "]";
}
public ResGroup clone() {
ResGroup mResGroup=null;
try {
mResGroup=(ResGroup)super.clone();
mResGroup.GroupItems=new ArrayList<GroupItem>();
for(GroupItem item:GroupItems){
mResGroup.GroupItems.add(item.clone());
}
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mResGroup;
}
}
public class GroupItem implements Cloneable{
public String DevMacId;
public String DevType;//switch
public String KeyNumber; //按键号
public String BindingIcon;
@Override
public String toString() {
return "GroupItem [DevMacId=" + DevMacId + ", DevType=" + DevType
+ ", KeyNumber=" + KeyNumber + ", BindingIcon=" + BindingIcon
+ "]";
}
public GroupItem clone(){
GroupItem item=null;
try {
item=(GroupItem) super.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return item;
}
}
http://cst.is-programmer.com/posts/20599.html