BeanUtils
属性必须添加set,get方法,否则拷贝不成功,但是不报错。(1)编写Bean1,不添加set,get方法
(2)编写测试类TestBean1,输出拷贝后的结果(3)查看输出,bean11并没有改变
(4)添加Bean1的set,get方法,发现可以拷贝成功。
如果属性名称相同,但是类型不同,并且两个类型之间没有转换器,则会抛出IllegalArgumentException异常。(对于属性名相同,类型不同,会尝试转换)(1)创建Bean2,添加属性a,类型时map,编写测试类TestBean2,测试发现会报错。
(2)什么是转换器:经过测试,发现如果Bean2中的a是map类型则会报错;如果是int,拷贝结束后a变成了0;如果是char则可以拷贝成功,说明基本类型之间如果是属性的类型不同,BeanUtils会尝试去强制类型转换,然后去拷贝,如果能转换则不抛出异常。这一点感觉很可怕,如果属性类型不同,有的时候会不抛出异常,但是也没转换成想要的结果。所以在转换时要确保属性名称相同,属性类型最好也相同。
原始对象存在的属性,但是在目的对象中不存在,那么这些属性会被忽略。 (1)创建Bean3,添加a和b两个属性
(2)编写测试类,将Bean3拷贝给Bean1,发现可以拷贝,不会抛出异常。
一个复杂的对象,对象中有布尔、日期、枚举、集合、map等属性。编写测试类TestBean5,经过测试都可以完美的转换。
不可用于转换List:上面都是转换的对象,一个简单的对象或者一个复杂的对象。如果直接转换一个list可以吗。编写测试类TestBean6,发现不可以。
Map转Object:可以将map对象转换成Object,map的key必须是String类型。map的key就对应Object对象中的属性名称,如果两者相同,则可以拷贝key所对应的值到此属性。