/** * 反射方法 * 将map转化为bean和将bean转化为map * @author Don Quixote * 2010-11-29 下午05:18:58 * Hello,Don Quixote! */ public class PublicReflection { //忽略属性的大小写问题 //字段类型也只支持最基本的String,Integer,Long,Float,Double public static <T> T ChangeMapToSimpleBean(Map<String, Object> map,T t){ Set<Entry<String, Object>> entrySet = map.entrySet(); for (Entry<String, Object> et : entrySet) { /* * 获取map的key和value */ String key=et.getKey().toLowerCase(); // bean全部转化为小写字段 Object value=et.getValue(); /** Class<?> cls=t.getClass(); Class<?> spcls=cls.getSuperclass(); Class<?> spspcls=spcls.getSuperclass(); Method[] mds=cls.getDeclaredMethods(); Method[] spmds=spcls.getDeclaredMethods(); if(spspcls.equals(Object.class)){ System.out.println("上级为object"); } **/ List<Method> list= new ArrayList<Method>(); new PublicReflection().getObjMethodsWithExtends(t.getClass(), list); for(int i=0;i<list.size();i++){ String name=list.get(i).getName();// bean的名称 if(!name.startsWith("set"))continue; if(!changeStrToSetMethodNames(key).equalsIgnoreCase(name))continue; try { list.get(i).invoke(t, value); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } break; } } return t; } /** * 一个公共的用于将简单的bean中的值转化为map的方法。 * 简单bean说明:bean中只包含基本对象,并且含有get方法。 * 不会对bean中的list,Map,这些对象赋值。 * @param <T> * @param t * @return */ public static <T> Map<String,Object> changeSimpleBeanToMap(T t){ Map<String,Object> map=PublicNew.map(); Class cls=t.getClass(); Field[] fieldlist = cls.getDeclaredFields(); for(int i=0;i<fieldlist.length;i++){ Field f=fieldlist[i]; String name=f.getName(); Class<?> cs=f.getType(); try { String methodNme=changeStrToGetMethodNames(name); Method meth=null; Method[] mds=cls.getDeclaredMethods(); for(int j=0;j<mds.length;j++){ if(mds[j].getName().equals(methodNme)){ meth=cls.getMethod(methodNme); Object rtcs= meth.invoke(t, null); map.put(name, rtcs); break; } } if(meth==null){ System.out.println("在"+t.getClass().getName()+"中没有找到"+methodNme+"方法"); } } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return map; } private static String changeStrToSetMethodNames(String str){ if(str==null||str==""||str==" ") return null; char firstChar=str.toCharArray()[0]; String upstr=String.valueOf(firstChar).toUpperCase(); return "set"+upstr+str.substring(1); } private static String changeStrToGetMethodNames(String str){ if(str==null||str==""||str==" ") return null; char firstChar=str.toCharArray()[0]; String upstr=String.valueOf(firstChar).toUpperCase(); return "get"+upstr+str.substring(1); } private void getObjMethodsWithExtends( Class<?> cls,List<Method> list){ if(cls.equals(Object.class)){ return; } Method[] mds=cls.getDeclaredMethods(); for(int i=0;i<mds.length;i++){ list.add(mds[i]); } getObjMethodsWithExtends(cls.getSuperclass(), list); } }