敲代码的时候你可能忽略的一些小细节(篇一)

仅写给自己看看吧,以后在敲代码的时候注意一些!

列举一些语法、逻辑在使用的时候可能忽略的小细节!虽然不太实用,这些问题在报错的时候Debug都能发现,当然为了提高效率,使用BeanUtils.copyProperties的时候还是有这个意识吧!

1.BeanUtils.copyProperties(aDom,bDom);
  • 如果有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm。例如:一个用户注册页面,有一个User实体类和一个UserActionForm,我们一般会在Action里从ActionForm构造一个PO对象,传统的方式是使用类似下面的语句对属性逐个赋值:

例如:A表示含有属性,a表示不含有!

属性nameagesexhighweighttennisbsket
aDomAAAAAaa
bDomAAAAAAA
  • 问题:假设我们要将aDom的属性对应传到bDom里面去

传统方法:

    //向bDom中设置aDom中含有的属性
    
      bDom.setName(aDom.getName);
      
      bDom.setAge(aDom.getAge);
      
      bDom.setSex(aDom.getSex);
      
      bDom.setHigh(aDom.getHigh); 
      
      bDom.setWeight(aDom.getWeight);
      
      bDom.setName(aDom.getName);
      

简便方法:

    //向bDom中设置aDom中含有的属性
    
    BeanUtils.copyProperties(aDom,bDom);
    
  • 如果使用传统的方法,Bean里面的属性太多的话,那就变得不现实了,所以BeansUtil.copyProperties简化了很多,一条代码便搞定!

容易遗漏的小细节来了:

  • 1、很多时候我们在拷贝了属性以后容易忘记单独设置剩下两个属性!
    所以在以上代码完成的时候,需要单独添加属性!
    处理方法:
  BeanUtils.copyProperties(aDom,bDom);
  
  bDom.setTennis("网球");
  
  bBom.setBsket("篮球");
  • 2、假如我们的两个类是数据传输类,两个都拥有相同的属性,但有着不同的初始值!如下
属性nameagesexhighweighttennisbsket
aDomaa1217858NullNull
bDomNullNullNullNullNullNullNull

在表中tennis和bsket都是没有值的!需要我们单独赋值,在克服第一个疏忽之后我们还可能疏忽的是代码顺序!

  bDom.setTennis("网球");
  
  bBom.setBsket("篮球");
  
  BeanUtils.copyProperties(aDom,bDom);
  
  • 当我们使用上面代码的时候,最后你会发现你赋的值变为了Null ,为什么呢?其实细细理一下思路就能发现!我们使用BeanUtils.copyProperties复制属性的时候aDom的Null值将你set的值给覆盖了!
  • 处理方法也很简单:
   //只需要调整一下代码顺序即可,先copy再赋值,就不会被覆盖了!
   
    BeanUtils.copyProperties(aDom,bDom);
  
    bDom.setTennis("网球");
  
    bDom.setBsket("篮球");
  • 3、还有一种容易忽略的情况,和第二种差不多!两者属性默认值如下:
属性nameagesexhighweighttennisbsket
aDomaaNullNull58NullNull
bDomNull18Null185lNullNullNull

在避免1、2两种疏忽之后,第三种其实也很简单,两者默认属性有交叉的!在将aDom的属性copy到bDom的时候,aDom其本身的Null属性会覆盖掉bDom已有的属性!这个时候如果采用BeanUtils.copyProperties复制属性的时候,age和high不可避免需要单独set赋值。

解决方法:

    BeanUtils.copyProperties(aDom,bDom);
  
    bDom.setAge("18");
  
    bDom.setHigh("185");
  
    bDom.setTennis("网球");
  
    bDom.setBsket("篮球");

综上所述,如果使用BeanUtils.copyProperties,有需要单独赋值的属性尽量放在copy语句的后面,防止copy的时候被覆盖掉!当然使用BeanUtils.copyProperties只能拷贝属性名字相同的属性,如果对应的属性名称不一样的话就需要我们自定义converter对象转换工具类了!

声明:本文为作者学习心得,养成记录学习的好习惯吧!如有错误,望指正,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

private_static

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值