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; 
        }  

    }

  • 相关阅读:
    java读取ANSI编码或者UTF8编码文件乱码问题解决
    java集合框架(Framework)的性能
    堆排序程序
    Python监控Apache,MySQL
    堆排序和快速排序性能比较
    资源管理命令
    Python监控Apache,MySQL
    资源管理命令
    javap反编译
    浏览器的用户代理字符串
  • 原文地址:https://www.cnblogs.com/ckaifeng/p/4953105.html
Copyright © 2011-2022 走看看