實現Java 對象轉Map 不再怕繼承了

/**
     * 獲取一個類和其父類的全部屬性
     * 
     * @param clazz
     * @return
     */
    public static List<Field> findAllFieldsOfSelfAndSuperClass(Class clazz) {
        Field[] fields = null;
        List fieldList = Lists.newArrayList();
        while (true) {
            if (clazz == null) {
                break;
            } else {
                fields = clazz.getDeclaredFields();
                for (int i = 0; i < fields.length; i++) {
                    fieldList.add(fields[i]);
                }
                clazz = clazz.getSuperclass();
            }
        }
        return fieldList;
    }.net

 

 

/**
     * 將對象轉Map 
     * @param obj 待轉對象
     * @return
     */
   public static  Map<String, Object> getValueMap(Object obj) {  
        
        Map<String, Object> map = new HashMap<String, Object>();  
        // System.out.println(obj.getClass());  
        // 獲取f對象對應類中的全部屬性域  
        List<Field> list=findAllFieldsOfSelfAndSuperClass(obj.getClass());
           for (Field field : list) {
          
            String varName = field.getName();  
            try {  
                // 獲取原來的訪問控制權限  
                boolean accessFlag = field.isAccessible();  
                // 修改訪問控制權限  
                field.setAccessible(true);  
                // 獲取在對象f中屬性fields[i]對應的對象中的變量  
                Object o = field.get(obj);  
                if (o != null)  
                    map.put(varName, o);  
                // System.out.println("傳入的對象中包含一個以下的變量:" + varName + " = " + o);  
                // 恢復訪問控制權限  
                field.setAccessible(accessFlag);  
            } catch (IllegalArgumentException ex) {  
                ex.printStackTrace();  
            } catch (IllegalAccessException ex) {  
                ex.printStackTrace();  
            }  
        }  
        return map;  
  
    }  對象

相關文章
相關標籤/搜索