Java如何通過反射將map轉(zhuǎn)換為實(shí)體對象
Java通過反射將map轉(zhuǎn)換為實(shí)體對象
開發(fā)一個(gè)功能,需要將map的值賦予到實(shí)體對象中。其中一些固定數(shù)據(jù)是通過XML配置的,通過工具將XML轉(zhuǎn)換為Map,作為單例對象供系統(tǒng)使用。然后我開發(fā)的接口最終返回的是實(shí)體對象,所以需要將map轉(zhuǎn)為實(shí)體對象,也就是將map中存儲(chǔ)的值賦予到實(shí)體對象上。
我使用java的反射,然后通過for循環(huán),將反射獲取的實(shí)體類屬性名稱與map中的字段列名進(jìn)行比對,如果一致則進(jìn)行賦值。
當(dāng)然這里沒有考慮值的數(shù)據(jù)類型,都是通過Object類型直接賦值的。
我當(dāng)前使用沒有問題,如果有類型強(qiáng)烈要求的需要調(diào)整,增加類型判斷后再進(jìn)行賦值。
以下是個(gè)簡單demo的代碼實(shí)現(xiàn)
可參考:
import org.apache.commons.lang3.StringUtils; import java.lang.reflect.Field; import java.util.HashMap; /** * 將map轉(zhuǎn)換為 實(shí)體對象 */ public class MapToObjectUtils { public static void main(String[] args) throws Exception { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("id",1); map.put("name","張三"); map.put("sex","男"); map.put("age",18); // 使用反射 User user = new User(); Class<? extends User> aClass = user.getClass(); // 獲得某個(gè)類的所有聲明的字段,即包括public、private和 proteced Field[] fields = aClass.getDeclaredFields(); for (String key:map.keySet()){ for(Field field:fields){ // 設(shè)置屬性權(quán)限,設(shè)置為true 可屏蔽java語言的訪問檢測,使得私有對象也可被訪問 field.setAccessible(true); // 如果屬性名稱和map中的key一致,則可以進(jìn)行賦值 if(StringUtils.equals(key,field.getName())){ field.set(user,map.get(key)); } } } System.out.println(user.toString()); } }
實(shí)體類
class User{ private Integer id; /** * 姓名 */ private String name; /** * 性別 */ private String sex; /** * 年齡 */ private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", sex='" + sex + '\'' + ", age=" + age + '}'; } }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 基于Java反射的map自動(dòng)裝配JavaBean工具類設(shè)計(jì)示例代碼
- Java如何將任意類型的Object對象轉(zhuǎn)換為相應(yīng)的實(shí)體對象
- java中給實(shí)體對象屬性的空值賦默認(rèn)值
- java開發(fā)BeanUtils類解決實(shí)體對象間賦值
- Java 判斷實(shí)體對象及所有屬性是否為空的操作
- java實(shí)體對象與Map之間的轉(zhuǎn)換工具類代碼實(shí)例
- 淺談Java實(shí)體對象的三種狀態(tài)以及轉(zhuǎn)換關(guān)系
- Java利用反射自動(dòng)封裝成實(shí)體對象的方法
相關(guān)文章
springboot bean掃描路徑的實(shí)現(xiàn)
這篇文章主要介紹了springboot bean掃描路徑的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01Java程序單實(shí)例運(yùn)行的簡單實(shí)現(xiàn)
這篇文章主要介紹了Java程序單實(shí)例運(yùn)行的簡單實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java 8實(shí)現(xiàn)任意參數(shù)的單鏈表
這篇文章主要為大家詳細(xì)介紹了Java 8實(shí)現(xiàn)任意參數(shù)的單鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10idea新建springboot項(xiàng)目pom文件報(bào)錯(cuò)問題及解決
這篇文章主要介紹了idea新建springboot項(xiàng)目pom文件報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04