java中 BeanUtils.copyProperties的用法

        BeanUtils提供了对java发射和自省API的包装,这里对BeanUtils.copyProperties的用法做一个小小的介绍。

        通过函数名可以知道,copyProperties函数是对属性进行拷贝,该函数有两个参数,一个是原始的数据,另一个是接收这些属性的数据。这里给大家介绍一个我遇到的一个坑:在不同的jar包中,该函数的两个参数的位置不一样,有一种是copyProperties(java.lang.Object dest , java.lang.Object source);另外一种恰恰相反,copyProperties(java.lang.Object source , java.lang.Object dest),因此在实际使用的时候需要注意参数的位置。

        当两个对象之间的属性完全一样时,毫无疑问调用copyProperties时完全成功的,但是如果两个对象之间存在不同的属性时,会发生什么情况呢,BeanUtils则不对这些属性进行处理,需要程序员手动处理。

        除了BeanUtils以外,还有一个名为PropertyUtils的工具类,该类中也提供了copyProperties()方法,这个方法与前面说的方法相似,唯一不同点是PropertyUtils的工具类里面的copyProperties()方法提供类型转换功能,可以在支持的数据类型内进行数类型转换。由于增加了类型转换,因此速度会稍微慢一些。propertyUtils支持的转换类型如下:

* java.lang.BigDecimal   
  
* java.lang.BigInteger   
  
* boolean and java.lang.Boolean   
  
* byte and java.lang.Byte   
  
* char and java.lang.Character   
  
* java.lang.Class   
  
* double and java.lang.Double   
  
* float and java.lang.Float   
  
* int and java.lang.Integer   
  
* long and java.lang.Long   
  
* short and java.lang.Short   
  
* java.lang.String   
  
* java.sql.Date   
  
* java.sql.Time   
  
* java.sql.Timestamp

需要注意的是这里不支持java.util.Date,只支持java.sql.Date,因此在进行数据类型转换时需要注意这个问题。

BeanUtils.copyProperties虽然很实用,但是其花费的时间比较长,超过手动调用get和set方法,如果对时间没有太大要求可以考虑用这个函数。

本文参考自:https://www.cnblogs.com/HassanBlog/articles/3200239.html

原文地址:https://www.cnblogs.com/fpqi/p/9603769.html