zoukankan      html  css  js  c++  java
  • map和object互相转换

    /** 
     * 使用org.apache.commons.beanutils进行转换 
     */ 
    class A {  
           
        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进行转换 
     */ 
    class B {  
       
        public static Object mapToObject(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> objectToMap(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();  
     
    //默认PropertyDescriptor会有一个class对象,剔除之
    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进行转换 
     */ 
    class C {  
       
        public static Object mapToObject(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> objectToMap(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;  
        }   
    }

    推荐使用方法二,方法一的内部实现也是方法二,区别是方法一不会剔除“class”这个key,obj转成map后,会多一个key为class,value为类路径的Entry

  • 相关阅读:
    48. Rotate Image
    83. Remove Duplicates from Sorted List
    46. Permutations
    HTML5笔记
    18. 4Sum
    24. Swap Nodes in Pairs
    42. Trapping Rain Water
    Python modf() 函数
    Python min() 函数
    Python max() 函数
  • 原文地址:https://www.cnblogs.com/winkey4986/p/5333410.html
Copyright © 2011-2022 走看看