反射獲取和設置屬性值

單個獲取

 

 /**
     * 根據屬性名獲取屬性值
     *
     * @param fieldName
     * @param object
     * @return
     */
    private String getFieldValueByFieldName(String fieldName, Object object) {
        try {
            Field field = object.getClass().getDeclaredField(fieldName);
            //設置對象的訪問權限,保證對private的屬性的訪問
            field.setAccessible(true);
            return (String) field.get(object);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            return null;
        }
    }

    /**
     * 根據屬性名設置屬性值
     *
     * @param fieldName
     * @param object
     * @return
     */
    private void setFieldValueByFieldName(String fieldName, Object object, String value) {
        try {
            // 獲取obj類的字節文件對象
            Class c = object.getClass();
            // 獲取該類的成員變量
            Field f = c.getDeclaredField(fieldName);
            // 取消語言訪問檢查
            f.setAccessible(true);
            // 給變量賦值
            f.set(object, value);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
    }

 

批量獲取

 

 public static <T> T reflection(T targer, Map modifyMap) {

        try {
            for (Field filed : targer.getClass().getDeclaredFields()) {
                filed.setAccessible(true);
                Object val = filed.get(targer);

                for (Object key : modifyMap.keySet()) {
                    boolean flag = filed.getName().equals(key);
                    if (flag) {
                        filed.set(targer, modifyMap.get(key));
                    }

                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return targer;
    }

 

 public static void main(String[] args) {
        PdfDataTest test = new PdfDataTest();
        test.setColumn1(1111);
        Map map = new HashMap();
        map.put("column1", 888);
        System.out.println("修改前" + test);
        ReflectionTools.reflection(test, map);
        System.out.println("修改後" + test);
    }

效果如下.

 

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