java 反射机制--根据属性名获取属性值

1.考虑安全访问范围内的属性,没有权限访问到的属性不读取

[java] view plain copy

/** 
    * 根据属性名获取属性值 
    *  
    * @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

[java] view plain copy

/** 
   * 根据属性名获取属性值 
   *  
   * @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

[java] view plain copy

/** 
 * 根据属性名获取属性元素,包括各种安全范围和所有父类 
 *  
 * @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;  
 
}  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

【Go 语言社区】Go学习笔记:json处理

Encode 将一个对象编码成JSON数据,接受一个interface{}对象,返回[]byte和error: func Marshal(v interfac...

714120
来自专栏Linux驱动

33.QT-UTF8,GBK互转

19440
来自专栏ml

CF---(452)A. Eevee

A. Eevee time limit per test 1 second memory limit per test 256 megabytes in...

449110
来自专栏Java技术分享

JavaBean与内省操作

JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。

224100
来自专栏C语言及其他语言

C语言网Online Judge系统支持语言和编译说明

Online Judge系统支持语言和编译情况: 语言编译器语言版本编译参数Cgcc 4.6.3C99gcc Main.c -o Main -Wall -lm ...

30680
来自专栏阮一峰的网络日志

co 函数库的含义和用法

======================================== 以下是《深入掌握 ECMAScript 6 异步编程》系列文章的第三篇。 ...

34950
来自专栏分布式系统和大数据处理

ES6中的Generator函数

之前在React项目中,遇到异步请求,都是通过redux-thunk来处理,但使用这种方式,action就变得不那么纯净了。当前新的趋势是使用redux-sag...

15130
来自专栏JAVA后端开发

xml与java对象的快速互转

做流程图的项目时,新的流程定义为xml的,需要对xml与java对象进行互转 查了一下activiti的转换xml方式,发现转换太麻烦了,需要一步步的解析xm...

1.8K30
来自专栏函数式编程语言及工具

FunDA(8)- Static Source:保证资源使用安全 - Resource Safety

   我们在前面用了许多章节来讨论如何把数据从后台数据库中搬到内存,然后进行逐行操作运算。我们选定的解决方案是把后台数据转换成内存中的数据流。无论在打开数据库表...

223100
来自专栏马涛涛的专栏

JS面向对象一:MVC的面向对象封装

Namespace 命名空间 允许开发人员在一个独特, 应用相关的名字的名称下捆绑所有功能的容器。 Class 类 定义对象的特征。它是对象的属性和方法的模板定...

18720

扫码关注云+社区

领取腾讯云代金券