当前位置:   article > 正文

Hutools的BeanUtil.copyProperties对String转BigDecimal的注意点_hutool bigdecimal

hutool bigdecimal

一、操作环境

jdk:1.8

hutools:5.7.17

二、问题点

在使用BeanUtil.copyProperties进行对象拷贝时,A类定义一个String类型名称为C的字段,B类定义一个BigDecimal类型名称也为C的字段,将A类对象拷贝给B,当A类对象中的C字段属性值为一个空字符串时,B类对象的C字段属性值为0。

三、原因分析

这里不用实际的业务代码,以自己的测试代码为例

1、源类
  1. package com.example20.copy;
  2. import lombok.Data;
  3. /**
  4. * 简单描述该类
  5. *
  6. * @author LiuZhuzheng
  7. * @date 2023/8/15 11:20
  8. */
  9. @Data
  10. public class Source {
  11. private String price;
  12. private Integer num;
  13. }

2、目标类

  1. package com.example20.copy;
  2. import lombok.Data;
  3. import java.math.BigDecimal;
  4. /**
  5. * 简单描述该类
  6. *
  7. * @author LiuZhuzheng
  8. * @date 2023/8/15 11:20
  9. */
  10. @Data
  11. public class Target {
  12. private BigDecimal price;
  13. private Long num;
  14. }
3、测试入口
  1. package com.example20.copy;
  2. import cn.hutool.core.bean.BeanUtil;
  3. /**
  4. * 简单描述该类
  5. *
  6. * @author LiuZhuzheng
  7. * @date 2023/8/15 11:20
  8. */
  9. public class CopyTest {
  10. public static void main(String[] args) {
  11. Source source = new Source();
  12. source.setPrice("");
  13. source.setNum(2);
  14. Target target = BeanUtil.copyProperties(source, Target.class);
  15. System.out.println(target.getPrice());
  16. System.out.println(target.getNum());
  17. }
  18. }
4、debug分析

首先直接进入copyProperties方法,往下走会走到一个copy方法,

 进入其中,这里不是map相关拷贝,会走最下面的beanToBean

接着来到valueProviderToBean

进去,这里就是拷贝方法的主题逻辑地方,首先会判断 源对象不为空再进行拷贝,接下来的一堆拷贝参数的处理,这里我进行拷贝的时候没有传CopyOptions相关参数,因此会跳过,到下面就是遍历目标对象的属性值,先判断源对象是否有相同的属性字段名称,存在再调用value方法获取到相应的值并赋值给目标对象

之后进入value方法

 选择BeanValueProvider的实现

 继续往下走进入getValue方法

这里不再关心getValue方法的返回值,它会返回源对象的空字符串,接着看下面的数据转换, 

 进入convert方法内部,这里用到的时Number的转换器

继续进入Number的convert 内,首先进入的时抽象基本类AbstractConverter的convert方法,

这里进行一些空值判断,随后进入NumberConverter的convertInternal,其调用自身的convert,

判断目标对象的字段类型为BigDecimal,进入toBigDecimal方法 

源字段类型为String,因此进入NumberUtil.toBigDecimal

可以看到,在此处,当源对象为空字符串时,目标对象的会赋值为BigDecimal.ZERO。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/544553
推荐阅读
相关标签
  

闽ICP备14008679号