JAVA利用反射比较两个对象的属性值是否相等,可用于单据的变更比较,记录变更日志信息

该博客介绍了如何在Java中使用反射来比较两个对象的属性值。在测试过程中遇到了`Method not found: isSerialVersionUID`的序列化问题,通过删除实体类中的序列化版本号解决了该问题。
摘要由CSDN通过智能技术生成

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;//删除此行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值