Java如何通過反射將map轉(zhuǎn)換為實(shí)體對(duì)象
Java通過反射將map轉(zhuǎn)換為實(shí)體對(duì)象
開發(fā)一個(gè)功能,需要將map的值賦予到實(shí)體對(duì)象中。其中一些固定數(shù)據(jù)是通過XML配置的,通過工具將XML轉(zhuǎn)換為Map,作為單例對(duì)象供系統(tǒng)使用。然后我開發(fā)的接口最終返回的是實(shí)體對(duì)象,所以需要將map轉(zhuǎn)為實(shí)體對(duì)象,也就是將map中存儲(chǔ)的值賦予到實(shí)體對(duì)象上。
我使用java的反射,然后通過for循環(huán),將反射獲取的實(shí)體類屬性名稱與map中的字段列名進(jìn)行比對(duì),如果一致則進(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í)體對(duì)象
*/
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語言的訪問檢測,使得私有對(duì)象也可被訪問
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對(duì)象轉(zhuǎn)換為相應(yīng)的實(shí)體對(duì)象
- java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值
- java開發(fā)BeanUtils類解決實(shí)體對(duì)象間賦值
- Java 判斷實(shí)體對(duì)象及所有屬性是否為空的操作
- java實(shí)體對(duì)象與Map之間的轉(zhuǎn)換工具類代碼實(shí)例
- 淺談Java實(shí)體對(duì)象的三種狀態(tài)以及轉(zhuǎn)換關(guān)系
- Java利用反射自動(dòng)封裝成實(shí)體對(duì)象的方法
相關(guān)文章
springboot bean掃描路徑的實(shí)現(xiàn)
這篇文章主要介紹了springboot bean掃描路徑的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Java程序單實(shí)例運(yùn)行的簡單實(shí)現(xiàn)
這篇文章主要介紹了Java程序單實(shí)例運(yùn)行的簡單實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
java 線程之對(duì)象的同步和異步(實(shí)例講解)
下面小編就為大家?guī)硪黄猨ava 線程之對(duì)象的同步和異步(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
Java 8實(shí)現(xiàn)任意參數(shù)的單鏈表
這篇文章主要為大家詳細(xì)介紹了Java 8實(shí)現(xiàn)任意參數(shù)的單鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10
idea新建springboot項(xiàng)目pom文件報(bào)錯(cuò)問題及解決
這篇文章主要介紹了idea新建springboot項(xiàng)目pom文件報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

