发布时间:2019-05-08作者:laosun阅读(3022)
Apache Commons包 BeanUtils 对象拷贝实例demo Apache Commons 工具类大家都有用过,但是可能缺乏系统学习,只用到了一小部分功能,无法发挥极限的价值。
Person.java
/** * 新创建一个普通Java Bean,用来作为被克隆的对象 * 注意:使用内部类是不可以的 * @author sun */ public class Person { private String name; private String email; private Integer age; public Person() { } public Person(String name, String email, Integer age) { super(); this.name = name; this.email = email; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String toString() { return "Person[name='" + name + "',email='" + email + "',age='" + age + "']"; } }
BeanUtilsTest.java
import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; /** * 深克隆 * @author sun */ public class BeanUtilsTest { public static void main(String[] args) { deepBeanClone(); convertPojoMap(); } /** * 1. 对象转map * 2. map转对象 */ private static void convertPojoMap() { try { // 原理也是通过Java的反射机制来做的。 // 2、 将一个Map对象转化为一个Bean // 这个Map对象的key必须与Bean的属性相对应。 Map<String, String> map = new HashMap<>(); map.put("name", "tom"); map.put("email", "tom@"); map.put("age", "21"); // 将map转化为一个Person对象 Person person = new Person(); BeanUtils.populate(person, map); System.out.println("map转对象:"+person.getName()+" >> "+person.getAge()); // 通过上面的一行代码,此时person的属性就已经具有了上面所赋的值了。 // 将一个Bean转化为一个Map对象了,如下: @SuppressWarnings({ "unchecked" }) Map<String, String> map2 = BeanUtils.describe(person); System.out.println("对象转map:"+map2.get("name")+" >> "+map2.get("age")); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } /** * 测试对象深克隆 */ private static void deepBeanClone() { Person person = new Person(); person.setName("java"); person.setEmail("java@java.com"); person.setAge(28); try { // 克隆(深度克隆) Person person2 = (Person) BeanUtils.cloneBean(person); person2.setAge(29); System.out.println("克隆产生新对象并且更新:"+person2.getName() + " >> " + person2.getAge()); System.out.println("原对象:"+person.getName() + " >> " + person.getAge()); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } }
控制台打印:
克隆产生新对象并且更新:java >> 29 原对象:java >> 28 map转对象:tom >> 21 对象转map:tom >> 21
版权属于: 技术客
原文地址: https://www.sunjs.com/article/detail/9fb305fc8dca4477942b291731fb14ed.html
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。