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 @   西门长海  阅读(2700)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示