將Java物件轉換成Map的解決辦法
阿新 • • 發佈:2018-12-21
private static Map<String, Object> obj2Map(Object obj) {
Map<String, Object> map = new HashMap<String, Object>();
// System.out.println(obj.getClass());
// 獲取f物件對應類中的所有屬性域
Field[] fields = obj.getClass().getDeclaredFields();
for (int i = 0, len = fields.length; i < len; i++) {
String varName = fields[i].getName();
// varName = varName.toLowerCase();//將key置為小寫,預設為物件的屬性 (為保證屬性原樣,註釋掉本行)
try {
// 獲取原來的訪問控制權限
boolean accessFlag = fields[i].isAccessible();
// 修改訪問控制權限
fields[i].setAccessible(true);
// 獲取在物件f中屬性fields[i]對應的物件中的變數
Object o = fields[i].get(obj);
if (o != null)
map.put(varName, o.toString());
// System.out.println("傳入的物件中包含一個如下的變數:" + varName + " = " + o);
// 恢復訪問控制權限
fields[i].setAccessible(accessFlag);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}
return map;
Map<String, Object> map = new HashMap<String, Object>();
// System.out.println(obj.getClass());
// 獲取f物件對應類中的所有屬性域
Field[] fields = obj.getClass().getDeclaredFields();
for (int i = 0, len = fields.length; i < len; i++) {
String varName = fields[i].getName();
// varName = varName.toLowerCase();//將key置為小寫,預設為物件的屬性 (為保證屬性原樣,註釋掉本行)
try {
// 獲取原來的訪問控制權限
boolean accessFlag = fields[i].isAccessible();
// 修改訪問控制權限
fields[i].setAccessible(true);
// 獲取在物件f中屬性fields[i]對應的物件中的變數
Object o = fields[i].get(obj);
if (o != null)
map.put(varName, o.toString());
// System.out.println("傳入的物件中包含一個如下的變數:" + varName + " = " + o);
// 恢復訪問控制權限
fields[i].setAccessible(accessFlag);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}
return map;
}
public static void main(String[] args) throws Exception {
EdasCommon edasCommon = new EdasCommon();
edasCommon.setD_Ou(1.1);
edasCommon.setDomain("string");
edasCommon.setFl(1.2f);
edasCommon.setInTe(0);
edasCommon.setTAG(false);
Map<String, Object> obj2Map = obj2Map(edasCommon);
System.out.println(obj2Map);
}
integer、string、double、float、boolean型別,屬性名大小寫都可以