最近遇到一个问题,针对list列表中的bean对象进行不同处理,赋值给不同的对象实例,但是赋值后发现原值也已经被改变。
经查证,使用BeanUtils.cloneBean(bean实例)方法对bean对象进行克隆,从而实现各自处理各自内容的目的。
实例:
目的:将list列表中PriceInfoVo 对象中的时间格式由"20081202"转换为"2008-12-02",并重新赋值给另一个PriceInfoVo 对象实例,且保证原实例内容不变。
实现如下:
放置list对象:
引入:import org.apache.commons.beanutils.BeanUtils;
List priceList = new ArrayList();
PriceInfoVo priceInfoVo = new PriceInfoVo();
priceInfoVo.setEffDate("20081202");
priceList.add(priceInfoVo);
获取list列表中的bean对象信息,并对其进行格式转换:
//获取list中的PriceInfoVo实例
PriceInfoVo src = (PriceInfoVo)priceList.get(0);
try {
//克隆获取到的PriceInfoVo实例
PriceInfoVo dest = (PriceInfoVo)BeanUtils.cloneBean(src);
//更改克隆后PriceInfoVo实例的时间格式
dest.setEffDate(DateUtil.getDateStr(dest.getEffDate()));
//打印原梳理和克隆后实例的时间格式
System.out.println("src date:::"+src.getEffDate());
System.out.println("clone date:::"+dest.getEffDate());
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
执行结果如下:
src date:::20081202
clone date:::2008-12-02
由上述结果可以看出,时间格式修改并未改变原来的信息。