通过反射,将map转换为java对象
来源:互联网 发布:中南大学网络教务系统 编辑:程序博客网 时间:2024/05/13 14:25
场景:
已经知道对象的类型,以及属性对应的值,且值保存在map对象中,将该map转换为已知类型的对象。
方案:如代码。
测试类:public static void main(String[] args) {Map map = new HashMap<String,Object>();map.put("name", "zhangsanfeng");map.put("sex", "男");map.put("password", "passwordInfo");try {User user = (User) Utils.mapToBean(map, User.class);System.out.println(user.getName());System.out.println(user.getPassword());System.out.println(user.getSex());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}user类:public class User {private String name;private String sex;private String password;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}} /** * 将Map对象通过反射机制转换成Bean对象 * * @param map 存放数据的map对象 * @param clazz 待转换的class * @return 转换后的Bean对象 * @throws Exception 异常 */ public static Object mapToBean(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{ 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; }
1 0
- 通过反射,将map转换为java对象
- 利用java反射机制将Map转换为Bean对象
- 将map转换为java对象
- 利用java反射机制将任意对象的转换为map存储
- java使用反射将json对象转换为java对象
- 将map通过反射转化为实体
- 通过反射实现map转换为struct
- java 反射 将json对象转换为实体类
- java通过注解将对象转换为xml
- 如何通过Java代码将JSONObject转换为对象
- Map对象通过反射转化为JavaBean对象转化
- java 将一个listBean转换为map
- Java 8 将List转换为Map
- Java 8 将Map转换为List
- java方式的将java对象以及list或者map转化为json数据,json转换为object或者map
- 通过JAVA反射实现简单的ORM,将查询结果封装为对象
- 通过反射方式将RDD转换为DataFrame
- 如何通过反射将字符串转换为类
- Android开发中截取某字符串
- solr-solrj的使用
- activiti5.20简单介绍(五) -- 配置
- 常用正则表达式
- 通过JS判断联网类型和连接状态的实现代码
- 通过反射,将map转换为java对象
- linux下的top命令的各类参数详解
- R语言销售分析计算某商品的连带或连带率指标函数
- HttpClient的使用
- 设计模式-原型模式
- 游戏界面登陆效果优化
- kaggle入门digits Recognizer
- 泛型基本概念
- 图形算法:直线算法