commons-beanutils组件里的copypropertyis跟cloneBean(原创)
commons-beanutils组件里的copypropertyis和cloneBean(原创)深克隆和浅克隆的不同,大家都知道想用commons-
commons-beanutils组件里的copypropertyis和cloneBean(原创)
深克隆和浅克隆的不同,大家都知道
想用commons-beanutils直接调用他里面的方法实现深克隆
发现里面的那两个方法都只是实现的浅克隆,cloneBean的源码更是调用了copyProperties来实现的
?
想要用调用这个组件里的方法实现深克隆还是有办法的:
—(代码引用:http://www.iteye.com/topic/551430)
?
import?java.io.ByteArrayInputStream; ??import?java.io.ByteArrayOutputStream; ??import?java.io.ObjectInputStream; ??import?java.io.ObjectOutputStream; ??import?java.io.Serializable; ????import?org.apache.commons.beanutils.BeanUtils; ????public?class?M1?{ ????????public?static?void?main(String[]?args)?throws?Throwable?{ ??????????C1?o1?=?new?C1(); ??????????o1.setP1(new?C1()); ??????????C1?o2?=?(C1)?BeanUtils.cloneBean(o1); ??????????System.out.println(o1.getP1()?==?o2.getP1()); ??????????C1?o3?=?(C1)?deepClone(o1); ??????????System.out.println(o1.getP1()?==?o3.getP1()); ??????} ????????public?static?Object?deepClone(Object?src)?throws?Throwable?{ ??????????ByteArrayOutputStream?baos?=?new?ByteArrayOutputStream(); ??????????ObjectOutputStream?oos?=?new?ObjectOutputStream(baos); ??????????oos.writeObject(src); ??????????oos.close(); ????????????ByteArrayInputStream?bais?=?new?ByteArrayInputStream(baos.toByteArray()); ??????????ObjectInputStream?ois?=?new?ObjectInputStream(bais); ????????????Object?o?=?ois.readObject(); ??????????ois.close(); ??????????return?o; ??????} ????????public?static?class?C1?implements?Serializable?{ ????????????C1?p1; ????????????public?C1?getP1()?{ ??????????????return?p1; ??????????} ????????????public?void?setP1(C1?p1)?{ ??????????????this.p1?=?p1; ??????????} ????????} ??}?
其他的办法就是重写类里的cloneable方法了,自己实现深克隆