利用反射实现对象与map的互转
来源:互联网 发布:mac充电先绿灯后变红 编辑:程序博客网 时间:2024/05/22 09:49
package com.fuliwd.controler;import com.fuliwd.pojo.User;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;/** * Created by Administrator on 2017/3/6. */public class ObjectMapUtils { /*** * 将对象转换为map对象 * @param thisObj 对象 * @return */ public static Map objectToMap(Object thisObj) { Map map = new HashMap(); Class c; try { c = Class.forName(thisObj.getClass().getName()); //获取所有的方法 Method[] m = c.getMethods(); for (int i = 0; i < m.length; i++) { //获取方法名 String method = m[i].getName(); //获取get开始的方法名 if (method.startsWith("get")&&!method.contains("getClass")) { try{ //获取对应对应get方法的value值 Object value = m[i].invoke(thisObj); if (value != null) { //截取get方法除get意外的字符 如getUserName-->UserName String key=method.substring(3); //将属性的第一个值转为小写 key=key.substring(0,1).toLowerCase()+key.substring(1); //将属性key,value放入对象 map.put(key, value); } }catch (Exception e) { // TODO: handle exception System.out.println("error:"+method); } } } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return map; } /** * 将Map对象通过反射机制转换成Bean对象 * * @param map 存放数据的map对象 * @param clazz 待转换的class * @return 转换后的Bean对象 * @throws Exception 异常 */ public static Object mapToObject(Map<String, Object> map, Class<?> clazz) throws Exception { Object obj = clazz.newInstance(); if(map != null && map.size() > 0) { for(Map.Entry<String, Object> entry : map.entrySet()) { String propertyName = entry.getKey(); //属性名 Object value = entry.getValue(); String setMethodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1); //获取属性对应的对象字段 Field field = getClassField(clazz, propertyName); if(field==null) continue; //获取字段类型 Class<?> fieldTypeClass = field.getType(); //根据字段类型进行值的转换 value = convertValType(value, fieldTypeClass); try{ //调用对象对应的set方法 clazz.getMethod(setMethodName, field.getType()).invoke(obj, value); }catch(NoSuchMethodException e){ e.printStackTrace(); } } } return obj; } /** * 获取指定字段名称查找在class中的对应的Field对象(包括查找父类) * * @param clazz 指定的class * @param fieldName 字段名称 * @return Field对象 */ private static Field getClassField(Class<?> clazz, String fieldName) { if( Object.class.getName().equals(clazz.getName())) { return null; } Field []declaredFields = clazz.getDeclaredFields(); for (Field field : declaredFields) { if (field.getName().equals(fieldName)) { return field; } } Class<?> superClass = clazz.getSuperclass(); if(superClass != null) {// 简单的递归一下 return getClassField(superClass, fieldName); } return null; } /** * 将Object类型的值,转换成bean对象属性里对应的类型值 * * @param value Object对象值 * @param fieldTypeClass 属性的类型 * @return 转换后的值 */ private static Object convertValType(Object value, Class<?> fieldTypeClass) { Object retVal = null; if(Long.class.getName().equals(fieldTypeClass.getName()) || long.class.getName().equals(fieldTypeClass.getName())) { retVal = Long.parseLong(value.toString()); } else if(Integer.class.getName().equals(fieldTypeClass.getName()) || int.class.getName().equals(fieldTypeClass.getName())) { retVal = Integer.parseInt(value.toString()); } else if(Float.class.getName().equals(fieldTypeClass.getName()) || float.class.getName().equals(fieldTypeClass.getName())) { retVal = Float.parseFloat(value.toString()); } else if(Double.class.getName().equals(fieldTypeClass.getName()) || double.class.getName().equals(fieldTypeClass.getName())) { retVal = Double.parseDouble(value.toString()); } else { retVal = value; } return retVal; } public static void main(String... args) throws Exception{ User user = new User(); user.setId(1); user.setUserName("hhh"); user.setAge(12); user.setPassword("password"); //对象转map Map map = objectToMap(user); //map转对象 User newUser = (User) mapToObject(map,User.class); }}
0 0
- 利用反射实现对象与map的互转
- 利用Java的反射机制实现Bean实体与Map自动转换的工具类
- Java利用反射实现对象转json
- 遍历 Map 对象, 利用反射为 Class 对象的对应的属性赋值.
- 利用BeanMap进行对象与Map的相互转换 (在hibernate中 map集合转对象 用得到<重要>)
- 利用Java反射实现普通对象到JSONObject的转换
- 利用BeanMap进行对象与Map的相互转换
- 利用BeanMap进行对象与Map的相互转换
- 利用BeanMap进行对象与Map的相互转换
- 利用java反射机制将任意对象的转换为map存储
- 利用java反射机制将Map转换为Bean对象
- 利用java反射将map值封装到对象中
- 利用反射实现两个对象赋值
- 用反射实现对象的拷贝 及 利用内省类实现对象的复制
- 利用Java的反射与代理实现IOC模式
- 利用Java的反射与代理实现IOC模式
- 利用Java的反射与代理实现AOP
- 利用Java的反射与代理实现AOP(推荐!!!)
- jQuery滚动监听,实现商城楼梯式导航
- linux里mnt下无hgfs文件
- 父类委托机制[1]
- 电信pme流程管理引擎系统视频
- DNS,edns,httpdns杂谈
- 利用反射实现对象与map的互转
- php学习线路
- android getResources.getColor(R.color.colorId)方法遭弃用
- JdbcUnit的使用
- 微信小程序快捷键(来源百度经验)
- Android 自定义实现类似QQ消息贝塞尔拖拽效果BezierView
- 给按钮加前景色和字体大小(Java_Swing)
- 1009. Product of Polynomials (25)
- POJ 3259 Wormholes 最短路径