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

    }

  • 相关阅读:
    LeetCode 55. 跳跃游戏(Jump Game)I II tag 数组 贪心 动态规划
    科学的意义
    umi前后端交互技术,通用型request配置
    TD demo在我们机器上
    Ubuntu挂载和登录服务器
    TD属性总结
    TD音乐界面添加keyboard的流程
    VS Code常用键
    TD打印 log方法
    TD自定义控件流程
  • 原文地址:https://www.cnblogs.com/ckaifeng/p/4953105.html
Copyright © 2011-2022 走看看