利用Java反射机制将Bean转成Map

来源:互联网 发布:什么叫原宿风 知乎 编辑:程序博客网 时间:2024/06/06 08:26

初映像:根据类名就可以实例化该类,支持动态调用。

ReflectionJava被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过ReflectionAPIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public,static等等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fieldsmethods的所有信息,并可于运行时改变fields内容或唤起methods

import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Calendar;import java.util.GregorianCalendar;import java.util.LinkedHashMap;import java.util.Map;public class Map2BeanDemo {public static void main(String[] args){//把bean 转成map,实现BeanUtils.populate的逆过程Map<String,Object> map = new LinkedHashMap<String,Object>();Calendar ccBday = new GregorianCalendar(2012,11,09);Person cc = new Person(“cc",25,ccBday.getTime());map = transBean2Map(cc);System.out.println("***** print map ********");for(Map.Entry<String, Object> entry: map.entrySet()){System.out.println(entry.getKey() + ":" + entry.getValue());}}public static Map<String,Object> transBean2Map(Object obj){Map<String,Object> map = new LinkedHashMap<String,Object>();//key值 应该是 Person类中的属性名,利用反射机制Field[] fields = obj.getClass().getDeclaredFields();for(int i=0; i<fields.length; i++){String field = fields[i].toString();String[] keys = field.split("\\.");String key = keys[keys.length-1];char toUpperCase = (char)(key.charAt(0)-32);String keyUpper = key.replace(key.charAt(0),toUpperCase);Method getMethod;try {getMethod = obj.getClass().getDeclaredMethod("get"+keyUpper);//根据 field得到对应的get方法Object value = getMethod.invoke(obj);map.put(key, value);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();}catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} }return map;}}







原创粉丝点击