原文:https://blog.youkuaiyun.com/printsky/article/details/82226729原文链接
/**
* 比较新老对象的差别
*
* @author tuxuchen
* @date 2022/1/10 16:20
*/
public class ClassBase {
public final static String ADD = "新增";
public final static String UPDATE = "更新";
public final static String DELETE = "删除";
public static void main(String[] args) {
CompTest oldObj = new CompTest(1, "张三", 12);
CompTest newObj = new CompTest(1, "李四", 14);
try {
String message = ClassBase.comparatorObject("更新", oldObj, newObj);
System.out.println(message);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
/**
* 比较新老对象的差别
* @param unityOperate 类型
* @param oldObj 旧对象
* @param newObj 新对象
* @return matter 哪个字段有更新 content 内容更新成什么
*/
public static String comparatorObject(String unityOperate, Object oldObj, Object newObj) throws IllegalAccessException {
StringBuilder matter = new StringBuilder();
StringBuilder content = new StringBuilder();
if (oldObj != null && UPDATE.equals(unityOperate)) {
Map<String, Object> oldMap = changeValueToMap(oldObj);
Map<String, Object> newMap = changeValueToMap(newObj);
if (oldMap != null && !oldMap.isEmpty()) {
for (Map.Entry<String, Object> entry : oldMap.entrySet()) {
Object oldValue = entry.getValue();
Object newValue = newMap.get(entry.getKey());
if (!oldValue.equals(newValue)) {
matter.append("[").append(entry.getKey()).append("]");
content.append("[").append(oldValue).append("->").append(newValue).append("]");
}
}
}
} else {
matter.append("-");
content.append("-");
}
return matter.toString() + ">>>>>>" +content.toString();
}
/**
* 将类对象转换成Map
* @param entity 原对象
* @throws IllegalAccessException 类型转换时报错
* @return
*/
private static Map changeValueToMap(Object entity) throws IllegalAccessException {
Map resultMap = new HashMap<>();
Field[] fields = entity.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String name = field.getName();
resultMap.put(name, field.get(entity));
}
return resultMap;
}
/**
* 测试对象
*/
public static class CompTest {
private int id;
private String name;
private int age;
public CompTest(){ }
public CompTest(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "CompTest{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
}