java反射覆盖
功能:用于某个对象的新旧值进行更新覆盖操作。用途:常用于电商系统订单以及商品的新旧更新。
具体代码:下面以学生实体类进行讲解。
/**
* 学生类
*/
public class Student {
private Integer sid;
private String sname;
private Integer age;
private String gender;
public Student(int sid, String sname, int age, String gender) {
this.sid = sid;
this.sname = sname;
this.age = age;
this.gender = gender;
}
public Student(String sname, Integer age, String gender) {
this.sname = sname;
this.age = age;
this.gender = gender;
}
public Student() {
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Student{" +
"sid=" + sid +
", sname='" + sname + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Date; /** * 反射工具类 */ public class ReflectUtils { /** * 反射覆盖 * */ public static void saveOrupdate(Object s1,Object s2) throws Exception{ Class<?> c1=s1.getClass(); Class<?> c2=s2.getClass(); Field[] fields=c1.getDeclaredFields(); for(Field field:fields) { field.setAccessible(true); String name = field.getName(); // 获取属性的名字 name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法 String type = field.getGenericType().toString(); // 获取属性的类型 if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名 Method m = c2.getMethod("get" + name); String value = (String) m.invoke(s2); // 调用getter方法获取属性值 field.set(s1,value); } if (type.equals("class java.lang.Integer")) { Method m = c2.getMethod("get" + name); Integer value = (Integer) m.invoke(s2); field.set(s1,value); } if (type.equals("class java.lang.Boolean")) { Method m = c2.getMethod("get" + name); Boolean value = (Boolean) m.invoke(s2); field.set(s1,value); } if (type.equals("class java.util.Date")) { Method m = c2.getMethod("get" + name); Date value = (Date) m.invoke(s2); field.set(s1,value); } } } public static void main(String[] args) { Student s1=new Student(1,"张三",24,"男"); Student s2=new Student("赵薇",38,"女"); try { saveOrupdate(s1,s2); } catch (Exception e) { e.printStackTrace(); } System.out.println(s1.toString()); } }