首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 反射通用工具類:實現 Bean 屬性與 Map 雙向轉換

     編輯:Java 相關知識

在表單綁定、動態配置、緩存序列化等場景,常需在 Java Bean 與 Map<String, Object> 之間互轉。本文提供一個基於反射的 BeanRefUtil,支援基本型別、包裝型別、String、Date、Integer/int、Long、Double、Boolean 的自動轉換,並自動匹配 Getter/Setter 命名規約。

核心 API

// Bean → Map
public static Map getFieldValueMap(Object bean)

// Map → Bean
public static void setFieldValue(Object bean, Map valMap)

關鍵實現邏輯

  1. 獲取類的所有 Field 與 Method。
  2. 按慣例拼接 Getter/Setter 名稱(getXxx/setXxx),檢查方法是否存在。
  3. 調用 Getter 取值,按型別格式化(Date → "yyyy-MM-dd HH:mm:ss")。
  4. 調用 Setter 寫值,字串按目標型別解析(Integer.parseInt、Date.parse 等)。
  5. 異常靜默跳過,保證健壯性。

Date 型別處理範例

// 取值
if ("Date".equals(fieldType)) {
    result = fmtDate((Date) fieldVal);  // 格式化
}

// 寫值
} else if ("Date".equalsIgnoreCase(fieldType)) {
    Date temp = parseDate(value);        // 解析 "yyyy-MM-dd" 或 "yyyy-MM-dd HH:mm:ss"
    fieldSetMet.invoke(bean, temp);
}

測試用例輸出

通過反射賦值.
通過反射取值:
flag---false
height---173.5
times---1287932898276
age---27
userName---michael
date---2010-10-24 00:00:00

擴展建議

  • 補充 byte、char、BigDecimal、List/Map 巢狀型別支援。
  • 引入快取 Field/Method 元數據,提升高頻調用效能。
  • 考慮使用成熟庫:Apache Commons BeanUtils、MapStruct(編譯期生成)、Jackson(JSON 互轉)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved