多语言展示
当前在线:1628今日阅读:126今日分享:42

Java对象拷贝BeanUtils copyProperties

BeanUtils.copyProperties(Object dest, Object orig)在Java中可能会用到属性拷贝,不常用,但是有些需求确实要用到。对于某一属性,即原始对象和目的对象的属性名称相同,就可以拷贝原始对象的属性值到目的对象中。(不要求属性的类型,但是如果两个类型间不能转换则会抛出异常,下午回提到)jdk1.8org.apache.commons.beanutils.BeanUtils1java反射机制Reflection1Java的构造方法的加载机制Constructor
工具/原料

BeanUtils

方法/步骤
1

属性必须添加set,get方法,否则拷贝不成功,但是不报错。(1)编写Bean1,不添加set,get方法

2

(2)编写测试类TestBean1,输出拷贝后的结果(3)查看输出,bean11并没有改变

3

(4)添加Bean1的set,get方法,发现可以拷贝成功。

4

如果属性名称相同,但是类型不同,并且两个类型之间没有转换器,则会抛出IllegalArgumentException异常。(对于属性名相同,类型不同,会尝试转换)(1)创建Bean2,添加属性a,类型时map,编写测试类TestBean2,测试发现会报错。

5

(2)什么是转换器:经过测试,发现如果Bean2中的a是map类型则会报错;如果是int,拷贝结束后a变成了0;如果是char则可以拷贝成功,说明基本类型之间如果是属性的类型不同,BeanUtils会尝试去强制类型转换,然后去拷贝,如果能转换则不抛出异常。这一点感觉很可怕,如果属性类型不同,有的时候会不抛出异常,但是也没转换成想要的结果。所以在转换时要确保属性名称相同,属性类型最好也相同。

6

原始对象存在的属性,但是在目的对象中不存在,那么这些属性会被忽略。   (1)创建Bean3,添加a和b两个属性

7

(2)编写测试类,将Bean3拷贝给Bean1,发现可以拷贝,不会抛出异常。

8

一个复杂的对象,对象中有布尔、日期、枚举、集合、map等属性。编写测试类TestBean5,经过测试都可以完美的转换。

9

不可用于转换List:上面都是转换的对象,一个简单的对象或者一个复杂的对象。如果直接转换一个list可以吗。编写测试类TestBean6,发现不可以。

10

Map转Object:可以将map对象转换成Object,map的key必须是String类型。map的key就对应Object对象中的属性名称,如果两者相同,则可以拷贝key所对应的值到此属性。

推荐信息