使用反射对对象进行操作

该博客主要探讨了如何使用Java进行对象字段的空值检查和对比。`checkObjAllFieldsIsNull`方法用于判断对象的所有字段是否为空,而另外两个方法则比较两个对象的字段差异。通过反射获取并比较私有字段的值,对于不相等的字段,记录并返回其差异。示例代码展示了如何在实际操作中应用这些方法。
摘要由CSDN通过智能技术生成
判断对象是否为空
public static boolean checkObjAllFieldsIsNull(Object object) {
    if (null == object) {
        return true;
    }
    try {
        for (Field f : object.getClass().getDeclaredFields()) {
            //f.setAccessible(true);  在用反射时可以访问私有变量
            f.setAccessible(true);
            System.out.print(f.getName() + ":");
            System.out.println(f.get(object));
            if (f.get(object) != null && StringUtils.isNotBlank(f.get(object).toString())) {
                return false;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return true;
}

使用if判断null就不需要取差集了

public Map<String, String> checkObjAllFieldsIsNull(Object object, Object object1) {
    try {
        Map<String, String> map = new HashMap<>();
        //原始值
        String s = "";
        //修改后
        String s1 = "";
        for (Field f : object.getClass().getDeclaredFields()) {
            //f.setAccessible(true);  在用反射时可以访问私有变量
            f.setAccessible(true);
            for (Field f1 : object1.getClass().getDeclaredFields()) {
                f1.setAccessible(true);
                //todo  f.getName().equals(f1.getName()) && !f.get(object).equals(f1.get(object1))  NULL异常
                boolean flag = false;
                if (f.getName().equals(f1.getName())) {
                    if (f.get(object) != null && f1.get(object1) != null) {
                        if (!f.get(object).equals(f1.get(object1))) {
                            flag = true;
                        }
                    } else if (f.get(object) == null && f1.get(object1) != null) {
                        flag = true;
                    } else if (f.get(object) != null && f1.get(object1) == null) {
                        flag = true;
                    }
                    if (flag) {
                        String ss = f1.getName() + ":" + f1.get(object1);
                        s = StringUtils.isEmpty(s) ? s + ss : s + "," + ss;
                        String ss1 = f.getName() + ":" + f.get(object);
                        s1 = StringUtils.isEmpty(s1) ? s1 + ss1 : s1 + "," + ss1;
                    }
                }
            }
        }
        if (StringUtils.isEmpty(s) && StringUtils.isEmpty(s1)) {
            return null;
        }
        map.put("原始值", s);
        map.put("修改后", s1);
        return map;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

取两个对象差值

public Map<String, String> checkObjAllFieldsIsNull(Object object, Object object1) {
    try {
        Map<String, String> map = new HashMap<>();
        //原始值
        String s = "";
        //修改后
        String s1 = "";
        for (Field f : object.getClass().getDeclaredFields()) {
            //f.setAccessible(true);  在用反射时可以访问私有变量
            f.setAccessible(true);
            for (Field f1 : object1.getClass().getDeclaredFields()) {
                f1.setAccessible(true);
                //todo   f.getName().equals(f1.getName()) && !f.get(object).equals(f1.get(object1)) NULL异常
                if (f.getName().equals(f1.getName()) && f.get(object) != f1.get(object1)) {
                    System.out.println(f1.getName() + ":" + f1.get(object1));
                    System.out.println(f.getName() + ":" + f.get(object));
                    String ss = f1.getName() + ":" + f1.get(object1);
                    s = StringUtils.isEmpty(s) ? s + ss : s + "," + ss;
                    String ss1 = f.getName() + ":" + f.get(object);
                    s1 = StringUtils.isEmpty(s1) ? s1 + ss1 : s1 + "," + ss1;
                }
            }
        }
        if (StringUtils.isEmpty(s) && StringUtils.isEmpty(s1)) {
            return null;
        }
        map.put("原始值", s);
        map.put("修改后", s1);
        return map;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

使用!=需要取差集来得到值

public static void main(String[] args) {
    String s1 = "waybillHeadId:652849015356141568,orderNo:null,trackNo:null,currency:502,grossWeight:24.00000,netWeight:0.8,volume:0.00500,goodsValue:60.0,insuredFee:0.0,totalFreightInsured:0.0,remark:null,updateUser:1427877042061351,customsClearance:null";
    String s2 = "waybillHeadId:652849015356141568,orderNo:110,trackNo:,currency:502,grossWeight:24,netWeight:0.8,volume:0.005,goodsValue:60,insuredFee:0,totalFreightInsured:0,remark:,updateUser:1427877042061351,customsClearance:";
    String[] split = s1.split(",");
    String[] split1 = s2.split(",");
    List<String> list = Arrays.asList(split);
    List<String> list1 = Arrays.asList(split1);
    List<String> collect = list.stream().filter(num -> !list1.contains(num))
            .collect(Collectors.toList());
    String collect2 = collect.stream().map(String::valueOf).collect(Collectors.joining(","));
    System.out.println(collect2);
    List<String> collect1 = list1.stream().filter(num -> !list.contains(num))
            .collect(Collectors.toList());
    String collect3 = collect1.stream().map(String::valueOf).collect(Collectors.joining(","));
    System.out.println(collect3);
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值