java反射实现两个相同对象的属性值相加

两张表结构一样,查询使用的对象也一样,需要在程序里面 聚合一下,如果一个个属性get,写死到代码里面因为属性太多,代码肯定一堆get set,用反射获取属性方法后,再相加,并set到第一个对象中

public static void sumFieldValue(UserTransFileNumStatistics utfns, UserTransFileNumStatistics utfns1) {
        Class utfnsClazz = utfns.getClass();
        Class utfns1Clazz = utfns1.getClass();
        Field[] utfnsFields = utfnsClazz.getDeclaredFields();
        for (int i = 0; i < utfnsFields.length; i++) {
            Field utfnsField = utfnsFields[i];
            try {
                utfnsField.setAccessible(true);
                //相加
                utfnsField.get(utfns);
                Class type = utfnsField.getType();
                String fieldName = utfnsField.getName();
                if (!"creatorId".equals(fieldName) && !"userType".equals(fieldName)) {
                    try {
                        //int 或者 long类型 相加
                        Method getVal = utfnsClazz.getMethod("get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1));

                        if (type.getName().equals("java.lang.Long")) {
                            Method setVal = utfnsClazz.getMethod("set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1), Long.class);
                            Long longVal = (Long) getVal.invoke(utfns);
                            Long longVal1 = (Long) getVal.invoke(utfns1);
                            if (longVal != null && longVal1 != null) {
                                setVal.invoke(utfns, longVal1 + longVal);
                            }

                        } else if (type.getName().equals("java.lang.Integer")) {
                            Method setVal = utfnsClazz.getMethod("set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1), Integer.class);
                            Integer intVal = (Integer) getVal.invoke(utfns);
                            Integer intVal1 = (Integer) getVal.invoke(utfns1);
                            if (intVal != null && intVal1 != null) {
                                setVal.invoke(utfns, intVal1 + intVal);
                            }

                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }

            } catch (IllegalArgumentException | IllegalAccessException e) {
                e.printStackTrace();
            }

        }
    }






  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值