java 对象之间属性值复制
程序员文章站
2022-05-02 09:53:43
...
1, BeanUtils.copyProperties(dest, orig);
这种copy是浅拷贝,复制后的2个Bean的同一个属性可能拥有同一个对象的ref,这个在使用时要小心,特别是对于属性为自定义类的情况.还要属性为集合类的情况。小心hibernate的Set
2,BeanUtils.copyProperties与PropertyUtils.copyProperties的区别
这两个类几乎有一摸一样的功能,唯一的区别是:BeanUtils在对Bean赋值是会进行类型转化。举例来说也就是在copyProperty时只要属性名相同,就算类型不同,BeanUtils也可以进行copy;而PropertyBean则可能会报错。当然2个Bean之间的同名属性的类型必须是可以转化的,否则用BeanUtils一样会报错。
总结:
若目标对象或源对象有一方为null,则会抛出异常
如:java.lang.IllegalArgumentException: No destination bean specified
若在复制含有日期属性的对象时,使用BeanUtils.copyProperties,源日期属性值为null,则会抛出org.apache.commons.beanutils.ConversionException: No value specified for 'Date',此时可以用PropertyUtils.copyProperties
这种copy是浅拷贝,复制后的2个Bean的同一个属性可能拥有同一个对象的ref,这个在使用时要小心,特别是对于属性为自定义类的情况.还要属性为集合类的情况。小心hibernate的Set
2,BeanUtils.copyProperties与PropertyUtils.copyProperties的区别
这两个类几乎有一摸一样的功能,唯一的区别是:BeanUtils在对Bean赋值是会进行类型转化。举例来说也就是在copyProperty时只要属性名相同,就算类型不同,BeanUtils也可以进行copy;而PropertyBean则可能会报错。当然2个Bean之间的同名属性的类型必须是可以转化的,否则用BeanUtils一样会报错。
总结:
若目标对象或源对象有一方为null,则会抛出异常
如:java.lang.IllegalArgumentException: No destination bean specified
若在复制含有日期属性的对象时,使用BeanUtils.copyProperties,源日期属性值为null,则会抛出org.apache.commons.beanutils.ConversionException: No value specified for 'Date',此时可以用PropertyUtils.copyProperties
推荐阅读