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

    }

  • 相关阅读:
    Atitit.eclise的ide特性abt 编译
    Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1Python 3_x 新特性1python3.4新特性1python3.5新特性1值得关注的新特性1Pyth
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit.eclipse 4.3 4.4  4.5 4.6新特性
    atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc
    Atitit RSA非对称加密原理与解决方案
    Atitti.数字证书体系cer pfx attilax总结
    Atitit ftp原理与解决方案
    Atitit qzone qq空间博客自动点赞与评论工具的设计与实现
    Atitit 软件国际化原理与概论
  • 原文地址:https://www.cnblogs.com/ckaifeng/p/4953105.html
Copyright © 2011-2022 走看看