Java关于实体对象和Map对象之间的转换

来源:互联网 发布:centos vsftpd 编辑:程序博客网 时间:2024/05/18 04:45

  在工作中,我们多多少少会遇到这样的情况:需要将对象的个别属性和对应的值存放到Map对象中。其实属性相对少的时候还是比较方便的,我们完完全全手动写入下就能解决;但要是放入的属性特别的多,需要写的地方也特别多的时候,再这么手动写的话,这个工作量还是不小的。
  
  所以与其手动写入,倒不如直接统一处理下。下面来看看代码:

/**     * 实体对象转成Map     * @param obj 实体对象     * @return     */    public static Map<String, Object> object2Map(Object obj) {        Map<String, Object> map = new HashMap<>();        if (obj == null) {            return map;        }        Class clazz = obj.getClass();        Field[] fields = clazz.getDeclaredFields();        try {            for (Field field : fields) {                field.setAccessible(true);                map.put(field.getName(), field.get(obj));            }        } catch (Exception e) {            e.printStackTrace();        }        return map;    }

  我这里主要是用的反射的写法,至于其他的方法暂时还没有想到。这里我将所有实体类的属性及其对应的值放入了map当中,而且HashMap也是允许null键和值存在的,所以就不用考虑null这种情况。
  实体对象可以转成Map,那么Map必然也可转成实体对象,具体的代码如下:

/**     * Map转成实体对象     * @param map map实体对象包含属性     * @param clazz 实体对象类型     * @return     */    public static Object map2Object(Map<String, Object> map, Class<?> clazz) {        if (map == null) {            return null;        }        Object obj = null;        try {            obj = clazz.newInstance();            Field[] fields = obj.getClass().getDeclaredFields();            for (Field field : fields) {                int mod = field.getModifiers();                if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {                    continue;                }                field.setAccessible(true);                field.set(obj, map.get(field.getName()));            }        } catch (Exception e) {            e.printStackTrace();        }         return obj;    }

  下面我就来测试下,看下具体的效果:
  1.先写一个实体类Student

class Student {    private String userName;    private String age;    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getAge() {        return age;    }    public void setAge(String age) {        this.age = age;    }    @Override    public String toString() {        return "Student [userName=" + userName + ", age=" + age + "]";    }}

  2.在写个主方法测试下结果

public static void main(String[] args) {        Student s = new Student();        s.setUserName("ZHH");        s.setAge("24");        System.out.println(object2Map(s));        Map<String, Object> map = new HashMap<>();        map.put("userName", "zhh");        map.put("age", "24");        System.out.println(map2Object(map, Student.class));    }

  运行结果如下:

{userName=ZHH, age=24}Student [userName=zhh, age=24]

  如上,证明该方法可行。

原创粉丝点击