欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何通過反射將map轉(zhuǎn)換為實(shí)體對象

 更新時(shí)間:2024年09月23日 09:36:34   作者:智航云科技  
在Java開發(fā)中,常需要將XML配置數(shù)據(jù)轉(zhuǎn)為Map,并最終映射到實(shí)體對象上,通過單例模式管理XML轉(zhuǎn)換后的Map,并利用Java反射機(jī)制,通過屬性名稱匹配將Map的值賦給實(shí)體對象的對應(yīng)屬性,這種方法忽略了數(shù)據(jù)類型轉(zhuǎn)換,適用于數(shù)據(jù)類型一致的簡單場景,需要類型轉(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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot bean掃描路徑的實(shí)現(xiàn)

    springboot bean掃描路徑的實(shí)現(xiàn)

    這篇文章主要介紹了springboot bean掃描路徑的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • SpringBoot整合模板引擎過程代碼實(shí)例

    SpringBoot整合模板引擎過程代碼實(shí)例

    這篇文章主要介紹了SpringBoot整合模板引擎過程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java程序單實(shí)例運(yùn)行的簡單實(shí)現(xiàn)

    Java程序單實(shí)例運(yùn)行的簡單實(shí)現(xiàn)

    這篇文章主要介紹了Java程序單實(shí)例運(yùn)行的簡單實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java 格式化輸出數(shù)字的方法

    java 格式化輸出數(shù)字的方法

    在實(shí)際工作中,常常需要設(shè)定數(shù)字的輸出格式,如以百分比的形式輸出,或者設(shè)定小數(shù)位數(shù)等,現(xiàn)稍微總結(jié)如下
    2014-01-01
  • Java全面解析IO流相關(guān)知識

    Java全面解析IO流相關(guān)知識

    這篇文章主要介紹了IO流相關(guān)知識,包括File,字節(jié)流,字符流,特殊操作流(標(biāo)準(zhǔn)輸入流,標(biāo)準(zhǔn)輸出流,對象序列化與反序列化,properties與IO流結(jié)合)相關(guān)知識的總結(jié)
    2021-08-08
  • Java?list移除元素相關(guān)操作指南

    Java?list移除元素相關(guān)操作指南

    這篇文章主要給大家介紹了關(guān)于Java?list移除元素相關(guān)操作的相關(guān)資料,文中介紹的方法包括增強(qiáng)for循環(huán)、迭代器、Stream流和removeIf()方法,同時(shí)還介紹了如何從一個(gè)列表中刪除包含另一個(gè)列表元素的方法,以及如何刪除指定下標(biāo)位置的元素,需要的朋友可以參考下
    2024-12-12
  • java 線程之對象的同步和異步(實(shí)例講解)

    java 線程之對象的同步和異步(實(shí)例講解)

    下面小編就為大家?guī)硪黄猨ava 線程之對象的同步和異步(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java 8實(shí)現(xiàn)任意參數(shù)的單鏈表

    Java 8實(shí)現(xiàn)任意參數(shù)的單鏈表

    這篇文章主要為大家詳細(xì)介紹了Java 8實(shí)現(xiàn)任意參數(shù)的單鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Java?阻塞隊(duì)列BlockingQueue詳解

    Java?阻塞隊(duì)列BlockingQueue詳解

    本文詳細(xì)介紹了BlockingQueue家庭中的所有成員,包括他們各自的功能以及常見使用場景,通過實(shí)例代碼介紹了Java?阻塞隊(duì)列BlockingQueue的相關(guān)知識,需要的朋友可以參考下
    2022-06-06
  • idea新建springboot項(xiàng)目pom文件報(bào)錯(cuò)問題及解決

    idea新建springboot項(xiàng)目pom文件報(bào)錯(cuò)問題及解決

    這篇文章主要介紹了idea新建springboot項(xiàng)目pom文件報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論