最近项目中加操作日志的时候,对于不同的类,如果一个一个去比较,显得麻烦,故而想到写个方法,一次比较类前后变化的值。代码如下,此方法用于遍历类中的方法和值。
public String compared(BaseModel model1,BaseModel model2) throws Exception{
StringBuffer sbf = new StringBuffer();
System.out.println("halo,日志");
Field[] field1 = model1.getClass().getDeclaredFields(); //获取实体类的所有属性,返回Field数组
Field[] field2 = model2.getClass().getDeclaredFields(); //获取实体类的所有属性,返回Field数组
for(int j=0 ; j<field1.length ; j++){ //遍历所有属性
String name1 = field1[j].getName(); //获取属性的名字
String name2 = field2[j].getName(); //获取属性的名字
System.out.println("attribute name:"+name1);
name1 = name1.substring(0,1).toUpperCase()+name1.substring(1); //将属性的首字符大写,方便构造get,set方法
name2 = name2.substring(0,1).toUpperCase()+name2.substring(1); //将属性的首字符大写,方便构造get,set方法
String type1 = field1[j].getGenericType().toString(); //获取属性的类型
String type2 = field2[j].getGenericType().toString(); //获取属性的类型
if(type1.equals("class java.lang.String")){ //如果type是类类型,则前面包含"class ",后面跟类名
Method m1 = model1.getClass().getMethod("get"+name1);
Method m2 = model1.getClass().getMethod("get"+name2);
String value1 = (String) m1.invoke(model1); //调用getter方法获取属性值
String value2 = (String) m1.invoke(model1); //调用getter方法获取属性值
if(!value1.equals(value2)){
sbf.append(name1+"由"+value1+"变为:"+value2);
}
}
if(type1.equals("class java.lang.Integer")){
Method m1 = model1.getClass().getMethod("get"+name1);
Method m2 = model1.getClass().getMethod("get"+name2);
Integer value1 = (Integer) m1.invoke(model1);
Integer value2 = (Integer) m2.invoke(model2);
if(value1!=value2){
sbf.append(name1+"由"+value1+"变为:"+value2);
}
}
if(type1.equals("class java.lang.Short")){
Method m1 = model1.getClass().getMethod("get"+name1);
Method m2 = model2.getClass().getMethod("get"+name2);
Short value1 = (Short) m1.invoke(model1);
Short value2 = (Short) m2.invoke(model2);
if(value1 != value2){
sbf.append(name1+"由"+value1+"变为:"+value2); }
}
if(type1.equals("class java.lang.Double")){
Method m1 = model1.getClass().getMethod("get"+name1);
Method m2 = model2.getClass().getMethod("get"+name2);
Double value1 = (Double) m1.invoke(model1);
Double value2 = (Double) m2.invoke(model2);
if(value1 != value2){
sbf.append(name1+"由"+value1+"变为:"+value2);
}
}
if(type1.equals("class java.lang.Boolean")){
Method m1 = model1.getClass().getMethod("get"+name1);
Method m2 = model1.getClass().getMethod("get"+name2);
Boolean value1 = (Boolean) m1.invoke(model1);
Boolean value2 = (Boolean) m2.invoke(model2);
if(value1 != value2){
sbf.append(name1+"由"+value1+"变为:"+value2);
}
}
if(type1.equals("class java.util.Date")){
Method m1 = model1.getClass().getMethod("get"+name1);
Method m2 = model2.getClass().getMethod("get"+name2);
Date value1 = (Date) m1.invoke(model1);
Date value2 = (Date) m2.invoke(model2);
if(value1 != value2){
sbf.append(name1+"由"+value1+"变为:"+value2);
}
}
System.out.println("操作日志:"+sbf.toString());
}
return sbf.toString();
}