//通过<T>声明告诉JVM返回值定义一个泛型 T
这里的T只是个占位符的效果,26个字母随便写哪个字母都可以,但一定要是和< >里面相同的字母,这里使用T
package com.wuzefei.util; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; public class ObjectAndMap { public static Map<String,String> ObjectToMap(Object object) { HashMap<String, String> map = new HashMap<>(); Class<?> clazz = object.getClass(); //获取此类中各种属性包括private修饰的字段名 Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { try { String key = field.getName(); //作用就是让我们在用反射时访问私有变量 field.setAccessible(true); Object value = field.get(object); if (value instanceof java.util.Date) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String format = simpleDateFormat.format(value); map.put(key, format); } else { map.put(key, value.toString()); } } catch (Exception e) { e.printStackTrace(); } } return map; } public static <T> T MapToObject(Map<String,String> map,Class<T> t)throws Exception{ Field[] fields = t.getDeclaredFields(); //Object<T> t = new Object<>(); T tt = t.getDeclaredConstructor().newInstance(); for (Map.Entry<String,String> entry : map.entrySet()){ try { for (Field field:fields) { if (entry.getKey().equals(field.getName())){ System.out.println(entry.getValue()); field.setAccessible(true); String methodName = "set"+field.getName().substring(0,1).toUpperCase()+field.getName().substring(1); //获取参数的类型 System.out.println(t.getDeclaredField(field.getName()).getType()); if (t.getDeclaredField(field.getName()).getType().toString().equals("class java.util.Date")) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = simpleDateFormat.parse(entry.getValue()); Method method = t.getMethod(methodName,Date.class); method.invoke(tt,date); }else if (t.getDeclaredField(field.getName()).getType().toString().equals("class java.lang.String")){ Method method = t.getMethod(methodName,String.class); method.invoke(tt,entry.getValue()); }else if (t.getDeclaredField(field.getName()).getType().toString().equals("class java.lang.Integer")){ //注意lang包下的 Integer i =Integer.parseInt(entry.getValue());//从数据库根据name获取的值都是String类型 所以得转换类型 Method method = t.getMethod(methodName,Integer.class); method.invoke(tt,i); } } } } catch (Exception e) { e.printStackTrace(); } } return tt; } }