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中的字段列名進行比對,如果一致則進行賦值。
當然這里沒有考慮值的數(shù)據(jù)類型,都是通過Object類型直接賦值的。
我當前使用沒有問題,如果有類型強烈要求的需要調(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){
// 設置屬性權限,設置為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 +
'}';
}
}總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
idea新建springboot項目pom文件報錯問題及解決
這篇文章主要介紹了idea新建springboot項目pom文件報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04

