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;
            }
  • 相关阅读:
    Coursera机器学习week11 单元测试
    关于 TypeReference 的解释
    getModifiers 方法解释。
    instanceof isInstance isAssignableFrom 比较
    elasticsearch 基础 语法总结
    kibana 启动 关闭 和进程查找
    MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别
    spring boot 项目 热启动
    java zip 压缩文件
    Packet for query is too large (1660 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
  • 原文地址:https://www.cnblogs.com/gyjx2016/p/6078210.html
Copyright © 2011-2022 走看看