java 实现任意对象的值修改为期望的值

     最近项目上和其他团队的同学进行对接,发现他们对String类型的数据为"" 的时候处理不符合预期,这种为""的数据只能传null的时候,他们才能正确处理

这个要求~~~ 没事 安排

功能实现:

private static void changeParam(Object obj, Object expectValue,Function<Object, Boolean> function) throws Exception {

    Class<?> clazz = obj.getClass();

    BeanInfo beanInfo = Introspector.getBeanInfo(clazz);

    PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();

    for (PropertyDescriptor p : pds) {

        Method readMethod = p.getReadMethod();
        Method writeMethod = p.getWriteMethod();

        if (null == writeMethod) {
            continue;
        }

        Object result = readMethod.invoke(obj);

        if (function.apply(result)) {
            result = expectValue;
            writeMethod.invoke(obj, result);
        }
    }
}

测试验证:

public static void main(String[] args) throws Exception {
    Person person = new Person();

    person.setName("zhangsan");
    person.setAge("18");
    person.setWork("java");
    person.setAddress("");

    System.out.println(person);

    changeParam(person, null , p -> {
        if (p != null && p instanceof String && StringUtils.isBlank((String) p)) {
            return true;
        }
        return false;
    });

    System.out.println(person);

}

 

结果:

写代码就得一把梭 下班走人

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值