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è)簡(jiǎn)單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語言的訪問檢測(cè),使得私有對(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)文章
SpringCloud Gateway 權(quán)限認(rèn)證的實(shí)現(xiàn)
Spring Cloud Gateway 作為網(wǎng)關(guān)層,承擔(dān)著請(qǐng)求轉(zhuǎn)發(fā)、權(quán)限校驗(yàn)等重要職責(zé),本文主要介紹了SpringCloud Gateway 權(quán)限認(rèn)證的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-04-04
Springboot集成MongoDB無認(rèn)證與開啟認(rèn)證的配置方式
本文主要介紹了Springboot集成MongoDB無認(rèn)證與開啟認(rèn)證的配置方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03
Java實(shí)現(xiàn)二進(jìn)制與十進(jìn)制之間互相轉(zhuǎn)換的完整代碼
在編程中,數(shù)制轉(zhuǎn)換是一個(gè)非常常見的需求,Java 作為一種高級(jí)語言,提供了便捷的方法來實(shí)現(xiàn) 二進(jìn)制和 十進(jìn)制之間的轉(zhuǎn)換,本文將介紹 Java 中二進(jìn)制與十進(jìn)制互轉(zhuǎn)的原理與實(shí)現(xiàn)方式,并附上完整代碼示例,2025-08-08
,需要的朋友可以參考下
Tk.mybatis零sql語句實(shí)現(xiàn)動(dòng)態(tài)sql查詢的方法(4種)
有時(shí)候,查詢數(shù)據(jù)需要根據(jù)條件使用動(dòng)態(tài)查詢,這時(shí)候需要使用動(dòng)態(tài)sql,本文主要介紹了Tk.mybatis零sql語句實(shí)現(xiàn)動(dòng)態(tài)sql查詢的方法,感興趣的可以了解一下2021-12-12
MyBatis-Plus如何實(shí)現(xiàn)自動(dòng)加密解密
這篇文章主要介紹了MyBatis-Plus實(shí)現(xiàn)自動(dòng)加密解密方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
SpringBoot應(yīng)用實(shí)現(xiàn)向釘釘發(fā)送帶圖片的消息的兩種方法總結(jié)
在Spring Boot應(yīng)用中向釘釘發(fā)送帶圖片的消息,主要有兩種主流實(shí)現(xiàn)方式,一個(gè)是使用機(jī)器人Webhook,一個(gè)是通過釘釘開放平臺(tái)SDK,下面我們就來看看具體實(shí)現(xiàn)步驟吧2025-10-10
Java中編譯期異常和運(yùn)行期異常的區(qū)別解析
Java中的異常分為運(yùn)行期異常(RuntimeException)和編譯期異常(CheckedException),前者不強(qiáng)制處理,后者必須顯式處理,本文介紹Java中編譯期異常和運(yùn)行期異常的區(qū)別,感興趣的朋友一起看看吧2025-02-02
部署springboot項(xiàng)目讀取外部配置文件實(shí)現(xiàn)過程
本文介紹了Spring Boot項(xiàng)目如何讀取外部配置文件,以實(shí)現(xiàn)應(yīng)用與配置分離,主要通過將配置文件放在jar包的同級(jí)目錄中,或通過啟動(dòng)命令指定配置文件路徑等方式實(shí)現(xiàn),這種方法可以避免每次部署時(shí)修改配置文件的麻煩2026-04-04

