Java自定义注解判断修改后两个对象的指定字段变化情况,并展示出对应的中文名和对应的值
创始人
2025-06-01 12:33:19
0

首先,需要定义一个注解来标注需要进行比较的字段,如下所示:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface CompareField {String value();
}

这个注解定义了一个 value 属性,用于存储需要比较的字段的中文名。

接下来,我们需要定义一个工具类来比较两个对象的指定字段是否发生变化,如下所示

public class ObjectComparator {public static Map compare(Object oldObj, Object newObj) {Map result = new HashMap<>();try {// 获取所有字段Field[] fields = oldObj.getClass().getDeclaredFields();// 遍历所有字段for (Field field : fields) {// 如果字段被 @CompareField 注解标注if (field.isAnnotationPresent(CompareField.class)) {// 获取字段的中文名String fieldName = field.getAnnotation(CompareField.class).value();// 设置字段可访问field.setAccessible(true);// 获取字段的旧值和新值Object oldValue = field.get(oldObj);Object newValue = field.get(newObj);// 如果值不相等if (!Objects.equals(oldValue, newValue)) {// 将字段名和值添加到结果中result.put(fieldName, "旧值:" + oldValue + ",新值:" + newValue);}}}} catch (Exception e) {e.printStackTrace();}return result;}
}

这个工具类定义了一个 compare 方法,用于比较两个对象的指定字段是否发生变化。该方法首先通过反射获取对象的所有字段,然后遍历所有字段,如果字段被 @CompareField 注解标注,则获取该注解的值作为字段的中文名,然后获取该字段的旧值和新值,并比较它们是否相等,如果不相等,则将字段名和值添加到结果中。

最后,我们可以在需要比较的类的字段上添加 @CompareField 注解,如下所示:

public class User {@CompareField("用户名")private String username;@CompareField("密码")private String password;@CompareField("邮箱")private String email;// 省略其他字段和方法
}

然后,在需要比较两个对象的指定字段是否发生变化的地方,调用 ObjectComparator.compare 方法即可,如下所示:

User oldUser = new User("张三", "123456", "zhangsan@example.com");
User newUser = new User("李四", "123456", "lisi@example.com");Map changes = ObjectComparator.compare(oldUser, newUser);for (Map.Entry entry : changes.entrySet()) {System.out.println(entry.getKey() + ":" + entry.getValue());
}

这段代码将输出:

用户名:旧值:张三,新值:李四
邮箱:旧值:zhangsan@example.com,新值:lisi@example.com

上一篇:存储器介绍

下一篇:九【springboot】

相关内容

热门资讯

国内刷屏!日本化工巨头集体围观... 【DT新材料】获悉,近日, 东粤化学20 万吨/年混合废塑料资源化综合利用示范性项目试生产成功,受到...
华夏红利量化选股股票A:202... AI基金华夏红利量化选股股票A(021570)披露2025年二季报,第二季度基金利润42.66万元,...
西力科技:7月18日融资买入7... 证券之星消息,7月18日,西力科技(688616)融资买入787.74万元,融资偿还548.63万元...
多家银行细化提振消费“路线图”... 本报记者 杨洁 今年以来,一系列扩内需、促消费政策密集出台,市场活力不断激发。《证券日报》记者了解到...
基建概念股早盘走高,基建相关E... 基建概念股早盘走高,中国电建涨停,中国能建涨超9%,中国交建涨超5%。 受重仓股上涨影响,基建相关E...
明星基金经理二季度调仓曝光,多... 2025年二季报逐步披露,多位明星基金经理最新调仓情况浮出水面。 今年以来,创新药板块表现持续亮眼,...
原创 二... “卖房比卖白菜还难”,以前这听着就是个搞笑段子,现在却成了活生生的现实!你瞧瞧,电梯里、楼道间,还有...
兆威机电赴港IPO,近两年半员... 瑞财经 严明会 近日,据港交所,深圳市兆威机电股份有限公司(以下简称“兆威机电”)向港交所提交上市申...
越卖越贵,中产都开始“抢冰块”... 作者:陈澄 编辑:安迪 在经历过雪糕刺客、防晒衣刺客后,许多人发现,今年夏季的新刺客,似乎轮到了冰块...
晨丰科技:向全资子公司北网智算... 晨丰科技晚间公告,公司拟以自有资金9,000万元向全资子公司北网智算进行增资,增资后北网智算的注册资...
科创债发行规模超7600亿元,... 今年央行、中国证监会联合发布关于支持发行科创债有关事宜的公告,旨在通过创新金融工具进一步疏通科技企业...
泰福泵业关联并购:“牛散”家族... 2025年7月9日,主营水泵制造的泰福泵业(300992.SZ)宣布收购浙江南洋华诚科技股份有限公司...
A股特别提示(7-21):英伟... 来源:国金证券第5小时 新股:悍高集团 001221.SZ 1、国资央企援藏再升级。在国资央企助力西...
摩根基金管理(中国)胡迪旗下摩... 证券之星消息,7月21日摩根基金管理(中国)旗下胡迪 何智豪管理的摩根标普港股通低波红利交易型开放式...
争议升级!特朗普起诉《华尔街日... 【环球时报驻美国特约记者 戴润芝 环球时报特约记者 于文】美国总统特朗普18日起诉《华尔街日报》,索...
宋清辉:经常喜欢抛头露面的表演... 宗庆后事件以及其他案例的启示在于,在信息爆炸的时代,任何刻意塑造的“完美人设”都如同沙堡,经不起时间...
贴心服务赢得客户赞誉 本报晋城讯 近年来,阳城农商银行始终坚守金融为民初心,以“我为群众办实事”为行动指南,持续推进金融服...
正裕工业:拟定增募资不超4.5... 正裕工业晚间公告称,公司拟定增募资不超过4.5亿元,扣除发行费用后的净额用于正裕智造园(二期)项目及...
《2024年全国海水利用报告》... 中国日报7月19日电(记者 赵磊)记者从自然资源部获悉,近日,该部海洋战略规划与经济司发布《2024...