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;
            }
  • 相关阅读:
    多测师讲解html _伪类选择器17_高级讲师肖sir
    多测师讲解html _后代选择器16_高级讲师肖sir
    多测师讲解html _组合选择器_高级讲师肖sir
    多测师讲解html _标签选择器14_高级讲师肖sir
    前端 HTML form表单标签 input标签 type属性 重置按钮 reset
    前端 HTML form表单标签 textarea标签 多行文本
    前端 HTML form表单标签 input标签 type属性 file 上传文件
    前端 HTML form表单标签 input标签 type属性 radio 单选框
    前端 HTML form表单标签 input标签 type属性 checkbox 多选框
    前端 HTML form表单目录
  • 原文地址:https://www.cnblogs.com/gyjx2016/p/6078210.html
Copyright © 2011-2022 走看看