关于org.springframework.beans.BeanUtils.copyProperties(Object source, Object target)
DemographicDetail detail = new DemographicDetail ();
detail.setGender ("male");
// List<OtherName>是DemographicDetail的成员属性
OtherName name = new OtherName();
name.setFirstName ("firstName");
name.setLastName ("lastName");
List <OtherName> otherName = new ArrayList <OtherName> ();
otherName.add (name);
detail.setOtherName (otherName);
//把上面定义的detail的属性复制到detail2中
DemographicDetail detail2 = new DemographicDetail ();
BeanUtils.copyProperties (detail, detail2);
1)修改detail2中的gender,没有影响detail中gender的值。
2)然后我修改detail2中的otherName的firstName值,却同时把detail中的firstName的值也修改了,就是说其实复制到detail2中的otherName其实是一份引用。这里特别想知道,这两种情况是怎么回事,求教!!!
3)像类似这样的情况,我想要复制一份实例,而不是一个引用。通常有哪些处理方法???
DemographicDetail detail = new DemographicDetail ();
detail.setGender ("male");
// List<OtherName>是DemographicDetail的成员属性
OtherName name = new OtherName();
name.setFirstName ("firstName");
name.setLastName ("lastName");
List <OtherName> otherName = new ArrayList <OtherName> ();
otherName.add (name);
detail.setOtherName (otherName);
//把上面定义的detail的属性复制到detail2中
DemographicDetail detail2 = new DemographicDetail ();
BeanUtils.copyProperties (detail, detail2);
1)修改detail2中的gender,没有影响detail中gender的值。
2)然后我修改detail2中的otherName的firstName值,却同时把detail中的firstName的值也修改了,就是说其实复制到detail2中的otherName其实是一份引用。这里特别想知道,这两种情况是怎么回事,求教!!!
3)像类似这样的情况,我想要复制一份实例,而不是一个引用。通常有哪些处理方法???
解决方案 »
- 急!!!急!!!xml中的字符  是什么?
- DataSource的连接方式和getconnection到底有什么区别?
- 关于属性验证的问题
- 怎样用正则表达式截取截取小数点前面的值。
- 一个jtree的问题!
- 怎样用java实现ftp远程建立文件夹,急等!100分
- 请问一个关于时间的问题
- Exception in thread "main" java.lang.NoSuchMethodError: main
- jbuild的问题。
- 急!!!请问如何对jar文件进行签名????????
- 求助!safari 5.1 执行 ProxySelector.getDefault().select(new URI(strURL)).toString();
- flex String 转成XML格式 绑定到tree控件出问题了!
一般就是深度clone了。
detail.setGender ( "male "); //gender是个字符串
detail.setOtherName (otherName); //otherName是个list
修改detail2的gender相当于把detail2的gender指向另一个字符串,所以不会影响detail的gender
修改detail2的otherName的情况,因为detail和detail2的otherName都指向同一个list对象,所以修改detail2的otherName的元素,就相当于修改otherName所引用的list的元素,就相当于修改detail的otherName的元素,而otherName的元素是个OtherName对象,所以修改detail2中的otherName的firstName,相当于修改了同一个list的OtherName对象的firstName3)像类似这样的情况,我想要复制一份实例,而不是一个引用。通常有哪些处理方法???
修改BeanUtils.copyProperties (detail, detail2); 方法
或者自己进行深度拷贝
DemographicDetail detail2 = new DemographicDetail ();
//BeanUtils.copyProperties (detail, detail2);
detail2.setGender(detail.getGender);
List<OtherName> tmp = new ArrayList <OtherName>();
for (OtherName o : otherName) {
OtherName oo = new OtherName();
oo.setFirstName(o.getFirstName());
oo.setLastName(o.getLastName());
tmp.add(oo);
}
detail2.setOtherName(tmp);