詳解map轉對象

一、基礎概念

Map是一種鍵值對的數據結構,它是Java中非常常用的數據類型,尤其是在開發中常用於將JSON字符串轉化為對象。Object則是Java中的一個基礎數據類型,它是所有具體對象的超類。

二、從Map轉化為Object

從Map轉化為Object通常需要藉助於反射。Java反射機制是在運行時動態獲取類的信息的機制,它允許程序在運行過程中動態獲取對象的屬性和方法。

/**
 * 將Map轉化為Object
 *
 * @param map   待轉化的map
 * @param clazz 目標類
 * @return 目標類對象
 * @throws Exception 異常
 */
public static Object map2Object(Map map, Class clazz) throws Exception {
    if (map == null) {
        return null;
    }

    Object obj = clazz.newInstance();
    Field[] fields = clazz.getDeclaredFields();
    for (Field field : fields) {
        field.setAccessible(true);
        if (map.containsKey(field.getName()) && map.get(field.getName()) != null) {
            field.set(obj, field.getType().cast(map.get(field.getName())));
        }
    }

    return obj;
}

三、從Map轉化為自定義對象

在實際開發中,我們通常需要將Map轉化為自定義對象。在這種情況下,我們需要在自定義對象中添加相應的構造函數以及對應的setter方法。

public class User {
    private String name;
    private Integer age;
    private String email;

    public User() {}

    public User(String name, Integer age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
/**
 * 將Map轉化為自定義對象
 *
 * @param map 待轉化的map
 * @return 目標類對象
 * @throws Exception 異常
 */
public static Object map2User(Map map) throws Exception {
    if (map == null) {
        return null;
    }

    User user = new User();
    user.setName((String) map.get("name"));
    user.setAge((Integer) map.get("age"));
    user.setEmail((String) map.get("email"));

    return user;
}

四、從多個Map轉化為Object

如果需要將多個Map轉化為Object,我們需要藉助反射,通過調用setter方法進行賦值。

/**
 * 將多個Map轉化為Object
 *
 * @param clazz 目標類
 * @param maps  待轉化的maps
 * @return 目標類對象
 * @throws Exception 異常
 */
public static Object maps2Object(Class clazz, Map... maps) throws Exception {
    Object obj = clazz.newInstance();
    for (Map map : maps) {
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            if (map.containsKey(field.getName()) && map.get(field.getName()) != null) {
                Method method = clazz.getMethod("set" + StringUtil.firstLetterToUpper(field.getName()), field.getType());
                method.invoke(obj, map.get(field.getName()));
            }
        }
    }

    return obj;
}

五、從多個Map轉化為自定義對象

如果需要將多個Map轉化為自定義對象,我們只需要為自定義對象添加相應的構造函數以及對應的setter方法,然後調用maps2Object函數即可。

/**
 * 將多個Map轉化為自定義對象
 *
 * @param maps 待轉化的maps
 * @return 目標類對象
 * @throws Exception 異常
 */
public static Object maps2User(Map... maps) throws Exception {
    User user = new User();
    for (Map map : maps) {
        user.setName((String) map.get("name"));
        user.setAge((Integer) map.get("age"));
        user.setEmail((String) map.get("email"));
    }

    return user;
}

六、總結

本文詳細介紹了從Map轉化為Object的方法,包括從Map轉化為自定義對象、從多個Map轉化為Object以及從多個Map轉化為自定義對象等方面的講解,通過本文的學習,相信讀者已經能夠完整掌握這一知識點了。

原創文章,作者:YECJS,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/371424.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YECJS的頭像YECJS
上一篇 2025-04-23 00:48
下一篇 2025-04-23 00:48

相關推薦

  • 面向對象編程、類和對象

    面向對象編程(Object-Oriented Programming, OOP)是一種編程方法,它將現實世界中的事物抽象為對象(Object),對象的屬性和方法被封裝成類(Clas…

    編程 2025-04-29
  • Mapster:一個高性能的對象映射庫

    本文將深入介紹furion.extras.objectmapper.mapster,一個高性能的對象映射庫,解釋它是如何工作的以及如何在你的項目中使用它。 一、輕鬆地實現對象之間的…

    編程 2025-04-28
  • Python返回對象類型

    Python是一種動態、解釋型、高級編程語言。Python是一種面向對象的語言,即所有的一切都是一個對象。 一、基本類型 Python中的基本類型有整數int、浮點數float、布…

    編程 2025-04-28
  • Python中通過對象不能調用類方法和靜態方法的解析

    當我們在使用Python編寫程序時,可能會遇到通過對象調用類方法和靜態方法失敗的問題,那麼這是為什麼呢?接下來,我們將從多個方面對這個問題進行詳細解析。 一、類方法和靜態方法的定義…

    編程 2025-04-27
  • Python內置函數——查看對象內存

    本文將介紹Python內置函數中,在開發中查看對象內存的相關函數。 一、id()函數 id()函數是Python內置函數,用於返回對象的唯一標識符,也就是對象在內存中的地址。 nu…

    編程 2025-04-27
  • 解決ERP運行時錯誤429:ActiveX不能創建對象 DAO350

    ERP運行時錯誤429是由於「ActiveX不能創建對象」而引發的。這種錯誤通常是由於您在嘗試訪問Microsoft Access數據庫時缺少了必要的組件。 一、安裝並註冊DAO庫…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25

發表回復

登錄後才能評論