zoukankan      html  css  js  c++  java
  • map和java对象的转换方法

    package com.xkeshi.payment.sdk.zhejunion;

    import java.beans.BeanInfo;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.lang.reflect.Modifier;
    import java.util.HashMap;
    import java.util.Map;

    /**
    * Created by jiangzw on 2017/10/17.
    */
    public class MapDemo {

    /*-----------使用org.apache.commons.beanutils进行转换-----------*/
    public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
    if (map == null) {
    return null;
    }

    Object obj = beanClass.newInstance();

    org.apache.commons.beanutils.BeanUtils.populate(obj, map);

    return obj;
    }

    public static Map<?, ?> objectToMap(Object obj) {
    if (obj == null) {
    return null;
    }

    return new org.apache.commons.beanutils.BeanMap(obj);
    }
    /*-----------------------------------------------------*/

    /**********************使用Introspector进行转换**********************/
    public static Object mapToObject2(Map<String, Object> map, Class<?> beanClass) throws Exception {
    if (map == null)
    return null;

    Object obj = beanClass.newInstance();

    BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
    PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
    for (PropertyDescriptor property : propertyDescriptors) {
    Method setter = property.getWriteMethod();
    if (setter != null) {
    setter.invoke(obj, map.get(property.getName()));
    }
    }

    return obj;
    }

    public static Map<String, Object> objectToMap2(Object obj) throws Exception {
    if(obj == null)
    return null;

    Map<String, Object> map = new HashMap<String, Object>();

    BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
    PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
    for (PropertyDescriptor property : propertyDescriptors) {
    String key = property.getName();
    if (key.compareToIgnoreCase("class") == 0) {
    continue;
    }
    Method getter = property.getReadMethod();
    Object value = getter!=null ? getter.invoke(obj) : null;
    map.put(key, value);
    }

    return map;
    }
    /********************************************/

    /*#############################使用reflect进行转换#############################*/
    public static Object mapToObject3(Map<String, Object> map, Class<?> beanClass) throws Exception {
    if (map == null)
    return null;

    Object obj = beanClass.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()));
    }

    return obj;
    }

    public static Map<String, Object> objectToMap3(Object obj) throws Exception {
    if(obj == null){
    return null;
    }
    Map<String, Object> map = new HashMap<String, Object>();

    Field[] declaredFields = obj.getClass().getDeclaredFields();
    for (Field field : declaredFields) {
    field.setAccessible(true);
    map.put(field.getName(), field.get(obj));
    }

    return map;
    }
    /*##########################################################*/

    public static class Person {
    String id;
    String name;

    public Person() {
    }

    public Person(String id, String name) {
    this.id = id;
    this.name = name;
    }

    public String getId() {
    return id;
    }

    public void setId(String id) {
    this.id = id;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }
    }


    public static void main(String[] args) {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("id", "1001");
    map.put("name", "jzw");

    Person person = new Person("1001", "jzw");

    try {
    Person person1 = (Person) mapToObject(map, Person.class);
    System.out.println("person1.id= " + person1.getId());
    System.out.println("person1.name= " + person1.getName());
    Map<String, Object> map1 = (Map<String, Object>) objectToMap(person);
    System.out.println("map1.id= " + map1.get("id"));
    System.out.println("map1.name= " + map1.get("name"));
    } catch (Exception e) {
    e.printStackTrace();
    }

    try {
    Person person2 = (Person) mapToObject2(map, Person.class);
    System.out.println("person2.id= " + person2.getId());
    System.out.println("person2.name= " + person2.getName());
    Map<String, Object> map2 = (Map<String, Object>) objectToMap2(person);
    System.out.println("map2.id= " + map2.get("id"));
    System.out.println("map2.name= " + map2.get("name"));
    } catch (Exception e) {
    e.printStackTrace();
    }

    try {
    Person person3 = (Person) mapToObject3(map, Person.class);
    System.out.println("person3.id= " + person3.getId());
    System.out.println("person3.name= " + person3.getName());
    Map<String, Object> map3 = (Map<String, Object>) objectToMap3(person);
    System.out.println("map3.id= " + map3.get("id"));
    System.out.println("map3.name= " + map3.get("name"));
    } catch (Exception e) {
    e.printStackTrace();
    }


    }

    }

  • 相关阅读:
    如何将Flex项目转成AIR
    用Flex绘制带Icon的Tooltip
    定制流动的link
    TWaver html5 + NodeJS + express + websocket.io + redis 快速搭建项目(二)
    如何让Flex的Tree显示水平滚动条
    TWaver html5 + NodeJS + express + websocket.io + redis 快速搭建项目(一)
    TWaver html5 + NodeJS + express + websocket.io + redis 快速搭建项目(三)
    告警传播过滤树节点
    TWaver HTML5 + Node.js + express + socket.io + redis(四)
    Developers dashboard in SharePoint 2010
  • 原文地址:https://www.cnblogs.com/wutongin/p/7791685.html
Copyright © 2011-2022 走看看