Java對象轉Map的解決辦法__Java

來源:互聯網
上載者:User

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為什麼會出現那個問題的,請您不吝賜教

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.