zoukankan      html  css  js  c++  java
  • 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();   
                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; 
        }  

    }

  • 相关阅读:
    链表VS数组
    数组VS集合
    最好、最坏、平均、均摊时间复杂度
    代码时间、空间复杂度分析
    “echo >”和“echo >>”的区别
    两数之和
    hadoop学习之----------IntelliJ IDEA上实现MapReduce中最简单的单词统计的程序(本地 和 hadoop 两种实现方式)
    Ubuntu16.04中解决关于The Internet Topology Zoo 的gml文件的读取并画图的问题
    Ubuntu16.04解决Ubuntu Sofware打开后无反应
    Ubuntu16.04中如何启用floodlight的一种方式
  • 原文地址:https://www.cnblogs.com/ckaifeng/p/4953105.html
Copyright © 2011-2022 走看看