这篇文章主要介绍了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方法获取对象签证官的属性值过程解析