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;
 
    }

 

posted @ 2022-01-05 14:12  西门长海  阅读(2694)  评论(0编辑  收藏  举报