Java如何通過反射將map轉(zhuǎn)換為實體對象
Java通過反射將map轉(zhuǎn)換為實體對象
開發(fā)一個功能,需要將map的值賦予到實體對象中。其中一些固定數(shù)據(jù)是通過XML配置的,通過工具將XML轉(zhuǎn)換為Map,作為單例對象供系統(tǒng)使用。然后我開發(fā)的接口最終返回的是實體對象,所以需要將map轉(zhuǎn)為實體對象,也就是將map中存儲的值賦予到實體對象上。
我使用java的反射,然后通過for循環(huán),將反射獲取的實體類屬性名稱與map中的字段列名進行比對,如果一致則進行賦值。
當(dāng)然這里沒有考慮值的數(shù)據(jù)類型,都是通過Object類型直接賦值的。
我當(dāng)前使用沒有問題,如果有類型強烈要求的需要調(diào)整,增加類型判斷后再進行賦值。
以下是個簡單demo的代碼實現(xiàn)
可參考:
import org.apache.commons.lang3.StringUtils; import java.lang.reflect.Field; import java.util.HashMap; /** * 將map轉(zhuǎn)換為 實體對象 */ 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(); // 獲得某個類的所有聲明的字段,即包括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一致,則可以進行賦值 if(StringUtils.equals(key,field.getName())){ field.set(user,map.get(key)); } } } System.out.println(user.toString()); } }
實體類
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é)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
idea新建springboot項目pom文件報錯問題及解決
這篇文章主要介紹了idea新建springboot項目pom文件報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04