表當提交時,把物件中非空屬性更新到另一個物件中
實體類
public class Person { private String name; private Integer age; private String sex; private String address; private int hight; public Person() { super(); }
public String getName() { return name; } public Person(String name, Integer age, String sex, String address, int hight) { super(); this.name = name; this.age = age; this.sex = sex; this.address = address; this.hight = hight; }
public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }
public int getHight() { return hight; }
public void setHight(int hight) { this.hight = hight; }
@Override public String toString() { return "Person [name=" + name + ", age=" + age + ", sex=" + sex + ", address=" + address + ", hight=" + hight + "]"; } }
main方法測試
public class test1 {
public static void main(String[] args) throws Exception { Person srcPerson = new Person("小明明",null,"男","深圳",188); Person tarPerson = new Person("小明",1,"男","北京",159); System.out.println(tarPerson); dataTransfer(srcPerson,tarPerson); System.out.println(tarPerson); dataTransfer(null,tarPerson); } /** * 把物件中非空屬性更新到另一個物件中 * (表單提交時使用注意:由於物件初始化時基本型別初始化 如int =0 這時無法判斷0是初始化的還是 表單傳過來的, * 所以傳入物件保證屬性無基本型別包括bolean型別) * @param src * @param tar * @throws Exception */ public static void dataTransfer(Object src,Object tar) throws Exception { if(src==null || tar ==null){ throw new Exception("dataTransfer(Object src,Object tar)傳入物件為空"); }; Class<?> srcClass = src.getClass(); Class<?> tarClass = tar.getClass(); if(srcClass != tarClass){ throw new Exception("傳入物件型別不同"); } Field[] fields = srcClass.getDeclaredFields(); Field.setAccessible(fields, true); String type; for (Field field : fields) { type = field.getType().getSimpleName(); if(Modifier.isStatic(field.getModifiers()) || Modifier.isFinal(field.getModifiers()))continue; if(field.get(src)==null || field.get(src) == field.get(tar))continue; if("byte/short/int/long/float/double/char/boolean/Byte/Short/Integer/Long/Float/Double/Character/Boolean/String/Date/List/Set/Map".contains(type)){ field.set(tar, field.get(src)); }else{ dataTransfer(field.get(src),field.get(tar)); } //System.out.println(field.getType().getSimpleName()+" "+field.getName()+":"+field.get(tar)); } }
}