java深度克隆 commons_对象复制(克隆)--深度复制

最近遇到的一个问题:方法中不想更改传入的Bean参数,想把传入的Bean重新复制一份。

试用了org.apache.commons.beanutils.BeanUtils的cloneBean(bean)方法,发现此方法只能针对单层结构的Bean(Bean中属性的类型是java基本数据类型)起作用。如果Bean中存在自定义的其他Bean类型或者Map、List等数据类型时,此方法只是把这些复杂的类型采用“=”号的形式给新的Bean赋值,此种方式直接把内存地址指向原始Bean中的对应属性了,实际在方法中对这些特殊的属性进行操作时还是会把原始Bean中的值更改。

在网上寻找了一下,发现采用以下方式可避免上面的问题:/**

* 对象深度克隆

*

* @param srcObj

* 源对象

* @return 复制后的新对象

*/

public static Object depthClone(Object srcObj) throws Exception {

Object cloneObj = null;

try {

ByteArrayOutputStream out = new ByteArrayOutputStream();

ObjectOutputStream oo = new ObjectOutputStream(out);

oo.writeObject(srcObj);

ByteArrayInputStream in = new ByteArrayInputStream(

out.toByteArray());

ObjectInputStream oi = new ObjectInputStream(in);

cloneObj = oi.readObject();

} catch (IOException e) {

throw new Exception("数据Bean克隆失败!");

} catch (ClassNotFoundException e) {

throw new Exception("数据Bean克隆失败!");

}

return cloneObj;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值