业务修改时,经常要比较实体类修改前后的变化记录日志
利用反射快速找到修改前后实体类的变化【需要设置好getter方法】
引用原版:
Class object = Model.class
Method[] methods = object.getMethods();
for(Method one:methods)
{
String methodName = one.getName();
if(methodName.indexof("get")==0)
{
if(!Objects.equals(one.invoke(oldModel),one.invoke(newModel)))
{
String fieldName = methodName.substring(3,4).toLowerCase()+methodName.substring(4);
System.out.println("field:"+fieldName+" old:"+one.invoke(oldModel)+" new:"+one.invoke(newModel));
}
}
}
修改版:
public class BeanChangeUtil<T> {
public String contrastObj(Object newModel, Object oldModel) {
List<String> result = new ArrayList<>();
try {
// 转换为传入的泛型T
T pojo1 = (T) oldModel;
Class object = pojo1.getClass();
Method[] methods = object.getMethods();
for (Method one : methods) {
String methodName = one.getName();
if (methodName.indexOf("get") == 0) {
Object oldInvoke = one.invoke(oldModel);
Object newInvoke = one.invoke(newModel);
if (Objects.nonNull(oldInvoke) && Objects.nonNull(newInvoke)) {
if ((oldInvoke.equals("") && newInvoke.equals("0")) || (oldInvoke.equals("0") && newInvoke.equals(""))) {
continue;
}
}
// null 和 空串""
if (Objects.isNull(oldInvoke) && Objects.nonNull(newInvoke) && (newInvoke.equals("") || oldInvoke.equals("0"))) {
continue;
}
if (Objects.isNull(newInvoke) && Objects.nonNull(oldInvoke) && (oldInvoke.equals("") || oldInvoke.equals("0"))) {
continue;
}
if (!Objects.equals(one.invoke(oldModel), one.invoke(newModel))) {
String fieldName = methodName.substring(3, 4).toLowerCase() + methodName.substring(4);
result.add(fieldName + "=" + one.invoke(newModel));
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result.toString();
}
}