Java自定義Bean實(shí)體類對(duì)象轉(zhuǎn)為Map類型對(duì)象的方法

引入

接入一些接口的時(shí)候常常要把Bean實(shí)體類轉(zhuǎn)化成Map對(duì)象,但事在使用不同的方法的時(shí)候會(huì)有不同結(jié)果,所以在這里記錄下,方便以后用到

實(shí)現(xiàn)

(1)、使用反射


public static HashMap<String, String> convertToMap(AtourBaseRequest obj)
            throws Exception {
        HashMap<String, String> map = new HashMap<String, String>();
        Field[] fields = obj.getClass().getDeclaredFields();
        for (int i = 0, len = fields.length; i &lt; len; i++) {
            String varName = fields[i].getName();
            boolean accessFlag = fields[i].isAccessible();
            fields[i].setAccessible(true);
            Object o = fields[i].get(obj);
            if (o != null)
                map.put(varName, o.toString());
            fields[i].setAccessible(accessFlag);
        }
        return map;
    }
    

但是上面的寫法是有個(gè)問題,問題在于:

Field[] fields = obj.getClass().getDeclaredFields();

以上即獲取類的字段

關(guān)于獲取類的字段有兩種方式

getFields()getDeclaredFields()
先看看這兩者的區(qū)別吧:

  • getFields():獲得某個(gè)類的所有的公共(public)的字段,包括父類中的字段。
  • getDeclaredFields():
    獲得某個(gè)類的所有聲明的字段,即包括public、private和proteced,但是不包括父類的申明字段。

同樣類似的還有g(shù)etConstructors()和getDeclaredConstructors()、getMethods()和getDeclaredMethods()
,這兩者分別表示獲取某個(gè)類的方法、構(gòu)造函數(shù)

按照上面的寫法,如果我們的bean類如果是有繼承的父類,并且我們一般寫實(shí)體類的字段都是私有的,那么父類中的字段我們就拿不到

(2)、使用BeanMap

通過 net.sf.cglib.beans.BeanMap 類中的方法,這種方式效率極高,因?yàn)樗褂昧司彺妫醮蝿?chuàng)建bean時(shí)需要初始化,之后就使用緩存,所以速度極快,經(jīng)測試,循環(huán)bean和map的轉(zhuǎn)換10000次,僅需要300毫秒左右

private static <T> Map<String, Object> beanToMap(T bean) {
        Map<String, Object> map = Maps.newHashMap();
        if (bean != null) {
            BeanMap beanMap = BeanMap.create(bean);
            for (Object key : beanMap.keySet()) {
                map.put(key + "", beanMap.get(key));
            }
        }
        return map;

以上。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容