最近业务里经常要在两个对象间复制属性,于是想当然的就用了BeanUtils.copyProperties来复制。然而有一天突然发现,用复制后的对象调用一个方法一直失败,用被复制的那个去调用却没有任何问题。检查了很久才发现,原来BeanUtils.copyProperties方法在遇到包装类时,竟然会把原来为null的属性,复制后赋值为0…(对于Boolean,复制后会变为false),难怪用复制后的对象会出错……
解决方法就很简单了,换用PropertyUtils.copyProperties即可。
不过这两者之间还是有一定区别的,PropertyUtils.copyProperties比起BeanUtils.copyProperties来说,少了类型转换的支持,也就是说必须要类型和name一样才可以复制。比如源对象有一个类型为Long的属性,而目标对象同名属性的类型为Date,BeanUtils.copyProperties可以复制,而PropertyUtils.copyProperties会报错。