使用反射实现JavaBean和map的相互转换

javaBean 转 map,map转 javaBean 很常见,这里记录下,

主要就是使用反射,反射很有意思的,有兴趣的可以去自行查看资料。

直接上代码。

map转对象

    /**
     * mao 转 对象
     * @param map
     * @param clz
     * @return
     */
    public static  T mapToObject(Map map,Class clz){
        try{
            // 获取当前对象的实例
            Object instance = clz.newInstance();
            // 获取所有定义的方法
            Method[] declaredMethods = clz.getDeclaredMethods();
            for (Method method : declaredMethods) {
                // 获取方法名字
                String mName = method.getName();
                // 获取字段名称, getset....
                String fName = mName.substring(3).substring(0,1).toLowerCase() + mName.substring(3).substring(1);
                // 确定是 set方法,因为只有 set方法set值
                if( mName.indexOf("set")==0 ){
                    // 获取方法的参数类型
                    Class[] types = method.getParameterTypes();
                    for (Class c : types) {
                        // 获取参数的类型,全限定类名
                        String type = c.getName();
                        // 判断类型,然后调用方法,set进入值
                        if( type.equals("java.lang.String") ){
                            Method stringMethod = clz.getDeclaredMethod(mName, String.class);
                            stringMethod.invoke(instance,String.valueOf(map.get(fName)));
                        }else if( type.equals("java.lang.Integer") ){
                            Method integerMethod = clz.getDeclaredMethod(mName, Integer.class);
                            integerMethod.invoke(mName,(Integer)map.get(fName));
                        }else if(type.equals("java.lang.Float") ){
                            Method integerMethod = clz.getDeclaredMethod(mName, Float.class);
                            integerMethod.invoke(mName,(Float)map.get(fName));
                        }else if(type.equals("java.lang.Double") ){
                            Method integerMethod = clz.getDeclaredMethod(mName, Double.class);
                            integerMethod.invoke(mName,(Double)map.get(fName));
                        }
                    }
                }
            }
            return (T)instance;
        }catch (Exception e){
            new IllegalStateException("转换失败");
            return (T)new Object();
        }
    }

对象转map

   /**
     * 对象转 map
     * @param object
     * @return
     */
    public static Map objectToMap(Object object){
        try{
            Map result = new HashMap<>();
            Class cla = object.getClass();
            // 获取所有定义的字段
            Field[] declaredFields = cla.getDeclaredFields();
            for (Field f: declaredFields) {
                String fName = f.getName();
                String methed = "get" + fName.substring(0,1).toUpperCase() + fName.substring(1);
                // 待执行方法
                Method declaredMethod = cla.getDeclaredMethod(methed, null);
                // 执行方法,获取值
                Object val = declaredMethod.invoke(object);
                result.put(fName,val);
            }
            return  result;
        }catch (Exception e){
            return new HashMap<>();
        }
    }

运行效果:

使用反射实现JavaBean和map的相互转换_第1张图片

你可能感兴趣的:(java基础,反射)