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

补充知识:java 通过反射拿到类(对象)所有属性的名字

在某些场合,我们可能只需要拿到一个对象的属性名即可,不需要拿到方法。

比如说,在不借助于Hibernate或是Mybatis框架的时候,我们希望能够写一个父类完成所有表的增删改成,并且通过使用Object类的方式来使所有的子类都能使用父类方法。

下来的代码是一个使用反射的方法来拿到对象的所有属性。

 public static void getFieldName(Object t){
  Class clazz = t.getClass();
  // 获取实体类的所有属性信息,返回Field数组
  Field[] fields = clazz.getDeclaredFields();
  int length= fields.length;
  while(length-->0) {
   System.out.println(fields[length].getName());
  }
 }

当然,通过反射的方式我们还可以做很多很多很多事情,但是这里不重复举例子了。

但是很值得说的就是,这些方法在java web编程的时候可能用得到,尤其是不借助于别人的框架,要自己写框架的时候。

对bean的操作还可以使用BeanUtils,这个是Apache软件基金会提供的,用于操作JavaBean的API。

以上这篇java反射机制根据属性名获取属性值的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java8中如何通过方法引用获取属性名详解

    前言 在我们开发过程中常常有一个需求,就是要知道实体类中Getter方法对应的属性名称(Field Name),例如实体类属性到数据库字段的映射,我们常常是硬编码指定 属性名,这种硬编码有两个缺点. 1.编码效率低:因为要硬编码写属性名,很可能写错,需要非常小心,时间浪费在了不必要的检查上. 2.容易让开发人员踩坑:例如有一天发现实体类中Field Name定义的不够明确,希望换一个Field Name,那么代码所有硬编码的Field Name都要跟着变更,对于未并更的地方,是无法在编译期发现的

  • JS实现获取自定义属性data值的方法示例

    本文实例讲述了JS实现获取自定义属性data值的方法.分享给大家供大家参考,具体如下: HTML部分: <div id="tree" data-leaves="47" data-plant-height="2.4m"></div> js部分: var tree = document.getElementById("tree"); //getAttribute()取值属性 console.log(tree

  • Java反射获取实例的速度对比分析

    之前代码有一个逻辑,是在初始化时读取某个包下的所有class文件,放入到一个HashMap里.代码运行过程中,通过Key获取到对应class的全路径名,最后通过Class.forName(className).getDeclaredConstructor().newInstance()获取实例对象. 后来同事看到了代码,对这个HashMap里存储方式提出了建议,之前的Map是<String,String>完全可以改成<String,Class> 后来我测试了一下两者实例化一个对象的

  • Java 反射机制原理与用法详解

    本文实例讲述了Java 反射机制原理与用法.分享给大家供大家参考,具体如下: 反射反射,程序员的快乐! 1.什么是反射? Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:并且能改变它的属性.而这也是Java被视为动态(或准动态,为啥要说是准动态,因为一般而言的动态语言定义是程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言.从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是

  • java反射机制根据属性名获取属性值的操作

    一.考虑安全访问范围内的属性,没有权限访问到的属性不读取 /** * 根据属性名获取属性值 * * @param fieldName * @param object * @return */ private String getFieldValueByFieldName(String fieldName, Object object) { try { Field field = object.getClass().getField(fieldName); //设置对象的访问权限,保证对priva

  • Java反射机制原理、Class获取方式以及应用场景详解

    目录 学习背景 一.Java反射机制是什么? 1.1 反射原理 1.2 反射例子 二.Java反射机制中获取Class的三种方式及区别? 2.1 Class的几种获取方式 2.2 代码演示几种方式的区别 三.Java反射机制的应用场景有哪些? 3.1 应用场景 3.2 简单工厂模式优化 3.2.1 什么是简单工厂模式? 3.2.2 简单工厂模式有什么用? 3.2.3 如何实现简单工程模式? 3.2.4 简单工厂模式优化 3.2.5 简单工厂模式再次优化 3.3 代理模式中的动态代理实现 3.3.

  • Java反射机制介绍

    1.通过反射,我们可以构建实例,得到成员变量的值,得到方法并调用. 还可以获得定义在成员变量.方法.方法参数上的注解. 接下来看代码实现,然后讲原理. 1)构建无参实例:通过反射调用无参构造函数 //1.通过全类名加载字节码对象 Class clazz = Class.forName("com.example.lib.Person"); //2.通过类的字节码拿到定义的构造函数 Constructor constructor = clazz.getConstructor(); //3.

  • Java基于反射机制实现全部注解获取的方法示例

    本文实例讲述了Java基于反射机制实现全部注解获取的方法.分享给大家供大家参考,具体如下: 一 代码 class Info{ //给mytoString方法加了2个内建Annotation @Deprecated @SuppressWarnings(value = "This is a waring!") public String mytoString(){ return "hello world"; } } class GetAnnotations{ publi

  • Java反射机制概念、原理与用法总结

    本文实例讲述了Java反射机制概念.原理与用法.分享给大家供大家参考,具体如下: 反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 反射机制能做什么 反射机制主要提供了以下功能: ① 在运行时判断任意一个对象所属的类: ② 在运行时构造任意一个类的对象: ③ 在运行时判断任意一个类所具有的成员变量和方法: ④ 在运行时调用任意一个

  • Java 反射机制的实例详解

    Java 反射机制的实例详解 前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来.那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现. 正文 Java反射机制定义 Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 用一句话总结就是反射可以实现在运行时可以知道任意一个类的属性和方法. 反射

  • Java反射机制的学习总结

    一.什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 有些时候,我们用过一些知识,但是并不知道它的专业术语是什么,在刚刚学jdbc时用过一行代码, Class.forName("com.mysql.jdbc.Driver.class").newInstance();但是那时候只知道那行代码是生成驱动对象实例,并不知道它的具体含义.听了反射机制这节课后,才知道,原来这

  • Java 反射机制详解及实例代码

    Java反射详解 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象获得完整的包名和类名 package Reflect; /** * 通过一个对象获得完整的包名和类名 * */ class Demo{ //other codes... } class hello{ public static void main(String[] args) {

  • Java反射机制深入理解

    Java反射机制深入理解 一.概念 反射就是把Java的各种成分映射成相应的Java类. Class类的构造方法是private,由JVM创建. 反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作.例如它允许一个java的类获取他所有的成员变量和方法并且显示出来.Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性.例如,Pascal.C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息.

  • 深入浅析Java反射机制

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制.反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩.当然反射本身并不是一个新概念,它可能会使我们联想到光

随机推荐