[轉]java 反射機制--根據屬性名獲取屬性值

原文鏈接:https://blog.csdn.net/jiao_zg/article/details/77897748

1.考慮安全訪問範圍內的屬性,沒有權限訪問到的屬性不讀取
 /**
     * 根據屬性名獲取屬性值
     * 
     * @param fieldName
     * @param object
     * @return
     */
    private String getFieldValueByFieldName(String fieldName, Object object) {
        try {
            Field field = object.getClass().getField(fieldName);
            //設置對象的訪問權限,保證對private的屬性的訪問
            
            return  (String)field.get(object);
        } catch (Exception e) {
          
            return null;
        } 
    }


2.不考慮從祖先類繼承的屬性,只獲取當前類屬性,包括四類訪問權限,private,protect,default,public
  /**
     * 根據屬性名獲取屬性值
     * 
     * @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) {
          
            return null;
        } 
    }

 3.考慮父類繼承過來的屬性,包括四類訪問權限,private,protect,default,public

    /**
     * 根據屬性名獲取屬性元素,包括各種安全範圍和所有父類
     * 
     * @param fieldName
     * @param object
     * @return
     */
    private Field getFieldByClasss(String fieldName, Object object) {
        Field field = null;
        Class<?> clazz = object.getClass();
 
        for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
            try {
                field = clazz.getDeclaredField(fieldName);
            } catch (Exception e) {
                // 這裏甚麼都不能拋出去。
                // 如果這裏的異常打印或者往外拋,則就不會進入
                
            }
        }
        return field;
 
    }



 ———————————————— 
版權聲明:本文爲CSDN博主「水上冰石」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jiao_zg/article/details/77897748

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