java反射机制完成List与List
2018-12-04  本文已影响0人  boyiis

编写转换帮助类

/**
     * 将JavaBean转换成Map
     * 
     * @param obj
     * @return
     * @throws SecurityException
     * @throws NoSuchMethodException
     * @throws InvocationTargetException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     */
    public static Map beanToMap(Object obj) throws NoSuchMethodException, SecurityException, IllegalAccessException,
            IllegalArgumentException, InvocationTargetException {
        // 创建map集合
        Map map = new HashMap();
        // 获取JavaBean中所有属性
        Field[] fields = obj.getClass().getDeclaredFields();
 
        for (Field fie : fields) {
 
            // 将属性第一个字母转换成大写
            String frist = fie.getName().substring(0, 1).toUpperCase();
            // 获取属性的类型
            Class<?> type = fie.getType();
            // 封装属性的get
            String getter = "";
            if ("boolean".equals(type.getName())) {
                getter = "is" + frist + fie.getName().substring(1);
            } else {
                getter = "get" + frist + fie.getName().substring(1);
            }
            // 获取JavaBean的方法
            Method method = obj.getClass().getMethod(getter, new Class[] {});
            // 调用方法,并接收返回值
            Object objec = method.invoke(obj, new Object[] {});
 
            // 判断返回值不为空
            if (objec != null) {
                map.put(fie.getName(), objec);
            } else {
                map.put(fie.getName(), "");
            }
        }
 
        return map;
    }
 
    /**
     * 将Map转换为JavaBean
     * 
     * @param map
     * @param obj
     * @return
     * @throws SecurityException
     * @throws NoSuchMethodException
     * @throws InvocationTargetException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     */
    public static Object mapToBean(Map<String, Object> map, Object obj) throws NoSuchMethodException, SecurityException,
            IllegalAccessException, IllegalArgumentException, InvocationTargetException {
 
        // 获取JavaBean中的所有属性
        Field[] field = obj.getClass().getDeclaredFields();
 
        for (Field fi : field) {
            // 判断key值是否存在
            if (map.containsKey(fi.getName())) {
                // 获取key的value值
                String value = map.get(fi.getName()).toString();
                // 将属性的第一个字母转换为大写
                String frist = fi.getName().substring(0, 1).toUpperCase();
                // 属性封装set方法
                String setter = "set" + frist + fi.getName().substring(1);
                // 获取当前属性类型
                Class<?> type = fi.getType();
                // 获取JavaBean的方法,并设置类型
                Method method = obj.getClass().getMethod(setter, type);
 
                // 判断属性为double类型
                if ("java.lang.String".equals(type.getName())) {
 
                  // 调用当前Javabean中set方法,并传入指定类型参数
                    method.invoke(obj, value);
 
                } else if ("int".equals(type.getName())) {
 
                    method.invoke(obj, Integer.parseInt(value));
 
                }else if ("double".equals(type.getName())) {
 
                    method.invoke(obj, Double.valueOf(value));
 
                    
                } else if ("char".equals(type.getName())) {
 
                    method.invoke(obj, value);
 
                } 
            }
        }
 
        return obj;
    }
 
    /**
     * 将List<Map<String,Object>>转换成List<javaBean>
     * 
     * @param listm
     * @param obj
     * @return
     * @throws InvocationTargetException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     * @throws SecurityException
     * @throws NoSuchMethodException
     */
    public static List<Object> ListMapToListBean(List<Map<String, Object>> listm, Object obj)
            throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
            InvocationTargetException {
 
        List<Object> list = new ArrayList<Object>();
        // 循环遍历出map对象
        for (Map<String, Object> m : listm) {
            // 调用将map转换为JavaBean的方法
            Object objs = mapToBean(m, obj);
            // 添加进list集合
            list.add(objs);
        }
 
        return list;
    }
 
    /**
     * 将list<javabean>转换为List<Map>
     * 
     * @param list
     * @return
     * @throws NoSuchMethodException
     * @throws SecurityException
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @throws InvocationTargetException
     */
    public static List<Map<String, Object>> ListBeanToListMap(List<Object> list) throws NoSuchMethodException,
            SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
 
        List<Map<String, Object>> listmap = new ArrayList<Map<String, Object>>();
 
        for (Object ob : list) {
 
            listmap.add(beanToMap(ob));
        }
 
        return listmap;
    }

遍历出List<JavaBean>的对象,调用上面已经写好的ListBeanToListMap方法,根据Javabean的属性调用get方法完成对Map集合的转换,然后再将已转换的Map集合添加至创建好的List<Map>集合中。List<Map>集合转换为List<Javabean>也是同样的运行方式,只是将get转为set了,这就是使用反射将List<Javabean>和List<Map>集合进行互相转换

上一篇下一篇