JAVA利用反射比较两个对象的属性值是否相等
java代码
public static void main(String[] args) {
Announcement announcement = new Announcement();
announcement.setContent("123");
announcement.setPhoto("测试");
Announcement announcement2 = new Announcement();
announcement2.setContent("123456");
announcement2.setPhoto("测试");
StringBuilder contrastObj2 = contrastObj2(announcement,announcement2);
System.out.println(contrastObj2);
}
private static StringBuilder contrastObj2(Object obj1, Object obj2) {
if (obj1 instanceof Announcement && obj2 instanceof Announcement) {
Announcement pojo1 = (Announcement) obj1;
Announcement pojo2 = (Announcement) obj2;
StringBuilder sb = new StringBuilder();
try {
Class clazz = pojo1.getClass();
Field[] fields = pojo1.getClass().getDeclaredFields();
for (Field field : fields) {
PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
Method getMethod = pd.getReadMethod();
Object o1 = getMethod.invoke(pojo1);
Object o2 = getMethod.invoke(pojo2);
// 避免空指针异常
String s1 = o1 == null ? "" : o1.toString();
String s2 = o2 == null ? "" : o2.toString();
if (!s1.equals(s2)) {
String str = "";
switch (field.getName()) {
case "content":
str = "内容";
break;
case "photo":
str = "图片";
break;
default:
str = "其它";
}
sb.append(str + " 修改前 " + s1 + " 修改后 " + s2);
sb.append(" ");
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
return sb;
}
return null;
}
运行结果
问题:
在测试过程中遇到序列化的问题
Method not found: isSerialVersionUID
提示:方法未找到:isSerialVersionUID
解决方法:
去除实体类中的序列化版本号
private static final long serialVersionUID = -5730795597492875698L;//删除此行