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


  • 考慮安全訪問范圍內的屬性,沒有權限訪問到的屬性不讀取

 /**
     * 根據屬性名獲取屬性值
     * 
     * @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;
        } 
    }
  • 不考慮從祖先類繼承的屬性,只獲取當前類屬性,包括四類訪問權限,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;
            } 
        }
  • 考慮父類繼承過來的屬性,包括四類訪問權限,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;
 
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM