bean對象通過反射拿到其屬性及屬性對應的值,並轉換成map

分析:

方法 功能
getFields() 獲取所有public字段,包括父類字段
getDeclaredFields() 獲取所有字段,public和protected和private,但是不包括父類字段

1.將實體類bean轉換成map(拿到屬性及屬性值put到map中):

public static Map<String,Object> objToMap(Object o) {
    Map<String, Object> map = Maps.newHashMap();
    Field[] fields = o.getClass().getDeclaredFields();
    for (Field field : fields) {
        try {
            field.setAccessible(true);
            map.put(field.getName(), field.get(o));
        } catch (Exception e) {
            log.error("反射錯誤,錯誤字段名爲【{}】", field.getName(), e);
        }
    }
    return map;
}

特點:作爲參數傳進來的bean對象如果有父類,那麼上面那個方法則不能獲取父類的屬性及屬性值,可如下操作:

           通過bean.class.getSuperclass()拿到父類的class(以下能拿到子類及父類的所有私有屬性)

                   List<Field> fieldList = new ArrayList<>() ;

                   Class tempClass = Bean.class;

                   while (tempClass != null) {//當父類爲null的時候說明到達了最上層的父類(Object類).

                              fieldList.addAll(Arrays.asList(tempClass .getDeclaredFields()));

                              tempClass = tempClass.getSuperclass(); //得到父類,然後賦給自己

                    }

                   for (Field f : fieldList) {

                             Log.d("getAllFields","getFields---"+f.getName());

                   }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章