实体类
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));
}
}
}