/**
 * 使用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; 
    }  

}

java实现map和object互转的三种方法的更多相关文章

  1. Java/JSP获得客户端网卡MAC地址的三种方法解析

    java/jsp获得客户端(IE)网卡MAC地址的方法大概有三种. 1.通过命令方式,在客户端执行Ipconfig 等等.(java/jsp) 2.通过ActiveX的方法.(jsp) 3.通过向13 ...

  2. java将doc文件转换为pdf文件的三种方法

    http://feifei.im/archives/93 —————————————————————————————————————————————— 项目要用到doc转pdf的功能,一番google ...

  3. Java Web开发中用Tomcat部署项目的三种方法

    第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加: <Context path="/hello" docBase ...

  4. Java多线程:向线程传递参数的三种方法

    在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果.但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别.由于线程 ...

  5. Java中实现十进制数转换为二进制的三种方法

    第一种:除基倒取余法 这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒着依次排列,就构成了转换后的二进制数 ...

  6. map和object互转的几种方式

    1.使用Apache中的BeanUtils类,导入commons-beanutils包. 2.使用JSON 3.利用java.lang.reflect.Field类完成Obj和Map之间的相互转换 h ...

  7. java中判断字符串是否为数字的三种方法

    以下内容引自  http://www.blogjava.net/Javaphua/archive/2007/06/05/122131.html 1用JAVA自带的函数   public static ...

  8. java判断一个字符串是否是数字的三种方法

    参考https://blog.csdn.net/ld_flex/article/details/7699161 1 用JAVA自带的函数 public static boolean isNumeric ...

  9. Java 判断字符串能否转化为数字的三种方法

    用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ if (! ...

随机推荐

  1. Oracle Flashback Technologies (总)

    Oracle Flashback Technologies Oracle 9i中增加了闪回查询技术,闪回查询为数据库提供了一种简单.强大.完全无干扰从人为错误中恢复的机制.通过闪回查询,用户可以查看过 ...

  2. Mysql复制-Slave库设置复制延迟

    mysql> stop slave; mysql> change master to master_delay=10;#单位是秒 mysql> start slave; mysql& ...

  3. mongodb概念

    一.mongodb与关系型数据库的一些概念上的改变 sql术语 mongodb术语 说明 database database 数据库 table collection 表/集合 row documen ...

  4. eclipse lua使用

    首先安装lua eclipse,装插件或者独立版的都可以.但是在独立版的eclipse装subclipse会报错,Failed to prepare partial IU.解决办法: work aro ...

  5. Lintcode: Minimum Adjustment Cost

    Given an integer array, adjust each integers so that the difference of every adjcent integers are no ...

  6. spfa的SLF优化

    spfa的SLF优化就是small label first 优化,当加入一个新点v的时候如果此时的dis[v]比队首dis[q.front()]还要小的话,就把v点加入到队首,否则把他加入到队尾,因为 ...

  7. C# 问题解决思路--《数组bytes未定义》,ASP.NET页面加载顺序

    好久没写博客了,废话不多说,直接说问题. 问题发生情况,首先这个是老项目,然后我是第一次修改.当我解决了各种引用,数据库配置之后等类似的问题,我启动的项目的时候,无任何问题,但是当我点击页面的按钮的时 ...

  8. char 和 varchar2 区别

    char 与 varchar2 区别 a:char长度固定而varchar2长度可变 b:char的遍历效率要比varchar2的效率稍高 c:char 浪费空间节省时间 varchar2浪费时间节省 ...

  9. Mysql索引介绍及常见索引(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别

    Mysql索引概念:说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目录是要 ...

  10. c 指针(一)

    一:什么是指针 变量i  的存储地址为P(假设为2000),*P  为指针变量 一个变量的地址称为该变量的“指针”.如果有另一个变量专门存放另一变量的地址(指针),则它称为“指针变量”. 指针是一个地 ...