如果两个对象A、B的大部分属性的名字都一样,此时想将A的属性值复制给B,一个一个属性GET\SET代码量太大,可以通过复制属性的方式减小工作量,同时代码看起来更加简洁明了,复制属性可以用Spring或者Commons下的Beanutils.copyProperties方法。这种复制只是简单的浅复制。

1.Spring BeanUtils.copyProperties

1
2
3
4
public void saveFeedback(CustomerFeedbackTemp customerFeedbackTemp)
 {
       CustomerFeedbackInfo feedBackInfo = new CustomerFeedbackInfo();
       BeanUtils.copyProperties(customerFeedbackTemp,feedBackInfo); <br>       ...... <br> }

上面部分代码将页面传入的CustomerFeedbackTemp对象的属性复制到CustomerFeedbackInfo对象里。方便吧。

 

2.Common BeanUtils.copyProperties

1
2
3
4
5
6
public void saveFeedback(CustomerFeedbackTemp customerFeedbackTemp)
 {
       CustomerFeedbackInfo feedBackInfo = new CustomerFeedbackInfo();
       BeanUtils.copyProperties(feedBackInfo, customerFeedbackTemp);
       ......
 }

用法跟Spring的差不多,只是参数位置不一样。

除BeanUtils外还有一个名为PropertyUtils的工具类,它也提供copyProperties()方法,作用与 BeanUtils的同名方法十分相似,主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围内进行转换,而前者不支持这个功能,但是速度会更快一些。BeanUtils支持的转换类型如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
* 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是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.Date类型。否则在转换时会提示argument mistype异常。