package com.agentdriving.driver.core.util; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Date; /** * 对比两个对象的变化的工具类 * * @author fengshuonan * @Date 2017/3/31 10:36 */ public class SimpleContrast { //记录每个修改字段的分隔符 public static final String separator = ";;;"; /** * 比较两个对象,并返回不一致的信息 * * @author stylefeng * @Date 2017/5/9 19:34 */ public static String contrastObj(Object pojo1, Object pojo2) { String str = ""; try { Class clazz = pojo1.getClass(); Field[] fields = pojo1.getClass().getDeclaredFields(); int i = 1; for (Field field : fields) { if ("serialVersionUID".equals(field.getName())) { continue; } PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); Method getMethod = pd.getReadMethod(); Object o1 = getMethod.invoke(pojo1); Object o2 = getMethod.invoke(pojo2); if (o1 == null || o2 == null) { continue; } if (o1 instanceof Date) { o1 = DateUtil.getDay((Date) o1); } if (!o1.toString().equals(o2.toString())) { if (i != 1) { str += separator; } str += "字段名称" + field.getName() + ",旧值:" + o1 + ",新值:" + o2; i++; } } } catch (Exception e) { e.printStackTrace(); } return str; } }