Java反射通过Getter方法获取对象签证官的属性值过程解析

  

这篇文章主要介绍了Java反射通过Getter方法获取对象签证官的属性值过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

  

有时候,需要动态获取对象的属性值。

  

比如,给你一个列表,要你遍历这个列表的对象的属性,而这个列表里的对象并不固定。比如,这次用户,下次可能是公司。

  

。这次我需要做一个Excel导出的工具类,导出的批量数据是以列表类型传入的,列表里的对象自然每次都不同,这取决于需要导出什么信息。

  

为了使用方便,将对象的属性名与属性值存于地图当中,使用时就可以直接遍历地图了。

  

此次的思路是通过反射和Getter方法取得值,然后记录在一个地图当中。

  

启动……   

将对象的属性名与属性值存于地图当中,以键值的形式存在,而价值并不希望以单一类型(如字符串)存在(因为涉及多种类型),所以用一个FieldEntity的自定义类(此类包含属性名,属性值,属性值类型等属性)

  

FieldEntity
  

        包com.nicchagil.util.fields;         进口java.lang.reflect.Field;   进口java.lang.reflect.InvocationTargetException;   进口java.lang.reflect.Method;   进口java.util.HashMap;   进口java.util.Map;      公开课FieldsCollector {      公共静态Map<字符串,FieldEntity>getFileds对象(对象)   抛出SecurityException, IllegalArgumentException NoSuchMethodException,   IllegalAccessException InvocationTargetException {   类clazz=object.getClass ();   ?[]字段clazz.getDeclaredFields ();   FieldEntity> Map<字符串;地图=new HashMap<字符串,FieldEntity>();      for (int i=0;我& lt;fields.length;我+ +){      对象resultObject=invokeMethod(对象,领域[我]. getname (), null);   map.put(字段[我]. getname(),新的FieldEntity(字段[我]. getname ()、resultObject领域[我]. gettype ()));   }      返回地图;   }      公共静态对象invokeMethod(对象所有者、字符串字段名   Object [] args)抛出SecurityException NoSuchMethodException,   IllegalArgumentException, IllegalAccessException InvocationTargetException {   类ownerClass=owner.getClass ();      方法方法=零;   方法=ownerClass.getMethod (GetterUtil.toGetter(字段名);      对象对象=零;   对象=method.invoke(所有者);      返回对象;   }      }      

主类,通过这个类的静态方法获取结果地图

  

FieldsCollector         包com.nicchagil.util.fields;         进口java.lang.reflect.Field;   进口java.lang.reflect.InvocationTargetException;   进口java.lang.reflect.Method;   进口java.util.HashMap;   进口java.util.Map;      公开课FieldsCollector {      公共静态Map<字符串,FieldEntity>getFileds对象(对象)   抛出SecurityException, IllegalArgumentException NoSuchMethodException,   IllegalAccessException InvocationTargetException {   类clazz=object.getClass ();   ?[]字段clazz.getDeclaredFields ();   FieldEntity> Map<字符串;地图=new HashMap<字符串,FieldEntity>();      for (int i=0;我& lt;fields.length;我+ +){      对象resultObject=invokeMethod(对象,领域[我]. getname (), null);   map.put(字段[我]. getname(),新的FieldEntity(字段[我]. getname ()、resultObject领域[我]. gettype ()));   }      返回地图;   }      公共静态对象invokeMethod(对象所有者、字符串字段名   Object [] args)抛出SecurityException NoSuchMethodException,   IllegalArgumentException, IllegalAccessException InvocationTargetException {   类ownerClass=owner.getClass ();      方法方法=零;   方法=ownerClass.getMethod (GetterUtil.toGetter(字段名);      对象对象=零;   对象=method.invoke(所有者);      返回对象;   }      }      

为了代码清楚些,将一些工具方法独立一下,如字段名到getter名字的转换方法

  

GetterUtil
  

        包com.nicchagil.util.fields;      公开课GetterUtil {/* *   *被字段名getter方法名称   * @param字段名   * @return   */去公共静态字符串(字符串字段名){      如果(字段名==null | | fieldname.length ()==0) {   返回null;   }/*如果第二个字符上,使“得到”+字段名getter的名字。例如,eBlog→geteBlog */如果(fieldname.length()在2){   字符串第二=fieldname。substring(1、2);   如果(second.equals (second.toUpperCase ())) {   返回新StringBuffer(“获得”).append(字段名).toString ();   }   }      *//*常见情况   字段名=new StringBuffer .append(字段名(“获得”)。substring (0, 1) .toUpperCase ())   .append (fieldname.substring (1) .toString ();      返回字段名;   }      }

Java反射通过Getter方法获取对象签证官的属性值过程解析