• 【java】之3种方式实现Object和Map之间的转换


     利用commons.BeanUtils实现Obj和Map之间转换,这种是最简单,也是最经常用的

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

    利用java reflect完成Obj和Map之间的相互转换

            public  Map<String,Object> Obj2Map(Object obj) throws Exception{
                Map<String,Object> map=new HashMap<String, Object>();
                Field[] fields = obj.getClass().getDeclaredFields();
                for(Field field:fields){
                    field.setAccessible(true);
                    map.put(field.getName(), field.get(obj));
                }
                return map;
            }
            public Object map2Obj(Map<String,Object> map,Class<?> clz) throws Exception{
                Object obj = clz.newInstance();
                Field[] declaredFields = obj.getClass().getDeclaredFields();
                for(Field field:declaredFields){
                    int mod = field.getModifiers(); 
                    if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){
                        continue;
                    }
                    field.setAccessible(true);
                    field.set(obj, map.get(field.getName()));
                }
                return obj;
            }

    利用Introspector完成Obj和Map之间的相互转换

    public Map<String,Object> obj2Map(Object obj) throws Exception{
                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;
            }
            
            public Object map2Obj(Map<String,Object> map,Class<?> clz) throws Exception{
                if (map == null)   
                    return null;    
                Object obj = clz.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;
            }
  • 相关阅读:
    Android之旅 自我图示总结四大组件
    解决.NET 调用JAVA WEBService服务中文乱码问题
    【itercast OSI 七层网络模型 学习笔记】Layer 1 物理层
    用SDL库播放yuy2 Packed mode
    uva539 卡坦岛 简单回溯!
    Zookeeper CLI
    在安装ZooKeeper之前,请确保你的系统是在以下任一操作系统上运行
    Zookeeper leader选举
    Zookeeper 工作流
    ZooKeeper的架构
  • 原文地址:https://www.cnblogs.com/gyjx2016/p/6078210.html
Copyright © 2020-2023  润新知