zoukankan      html  css  js  c++  java
  • 【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;
            }
  • 相关阅读:
    shell while-ssh
    webpack 4x版本 安装后提示错误
    vuejs跨域请求解决方法
    前端开发工程师常用的网站
    微信小程序手机号快速填写及会员卡开卡组件开放
    div css左边固定右边自适应布局
    Javascript面向对象篇
    web 前端篇:web前端到底是什么?有前途吗 ?
    js页面滚动时层智能浮动定位实现:
    谈一谈jquery中的事件处理
  • 原文地址:https://www.cnblogs.com/gyjx2016/p/6078210.html
Copyright © 2011-2022 走看看