java對象拷貝

項目中經常會遇到兩個對象之間的拷貝,如果使用set/get方法,則會造成大量代碼堆積,而且每次改動對象,又要改動相應的代碼。
而利用BeanUtils在對象間複製屬性,僅一行代碼,就可以得到相同的結果。

import org.apache.commons.beanutils.BeanUtils;
BeanUtils.copyProperties(dest, orig);

maven依賴:

<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.0</version>
</dependency>

當然,名稱不相同的屬性,需要我們手動處理。

注意:spring-beans jar包中org.springframework.beans.BeanUtils.copyProperties 方法 原對象與目標對象剛好相反。

其它的選擇:
除此之外PropertyUtils.copyProperties也可以進行淺複製。
這兩個類幾乎有一摸一樣的功能,唯一的區別是:BeanUtils在對Bean賦值是會進行類型轉化。舉例來說也就是在copyProperty時只要屬性名相同,就算類型不同,BeanUtils也可以進行copy;而PropertyBean則可能會報錯。當然2個Bean之間的同名屬性的類型必須是可以轉化的,否則用BeanUtils一樣會報錯。

異常:
如果bean中含有日期類型,則可能拋出異常org.apache.commons.beanutils.ConversionException: No value specified for ‘Date’ ,則需在copy之前,添加如下一句話即可:

ConvertUtils.register(new DateConverter(null), java.util.Date.class);
發佈了35 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章