Java Object轉Map,一開始使用的是org.apache.commons.beanutils.BeanUtils中的BeanUtils.describe(Obj);方法,這對於純轉換一個Object來說。好像沒啥異常。當將轉換的map放入到List列表時,會發現List中的元素全部是一樣的。,DEBUG好久,確認執行List的add(map)方法時,這個map對象都是不一樣的,但超過2個Map放入List時,裡面的元素就全變成最後放入的map元素,很奇怪,暫時原因不明。
後面改正的方法是運用反射的方法。具體函數如下:
private static Map<String, String> obj2Map(Object obj) {Map<String, String> map = new HashMap<String, String>();// 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;}用該方法完美解決問題,如您知道
BeanUtils為什麼會出現那個問題的,請您不吝賜教