/**
 * 使用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. mongodb远程连接以及备份、还原、导出、导入

    一.远程连接mongodb 连接命令:mongo -u username -p pwd 192.168.41.215:27017/database(用户名对应的数据库) 二.mongodump备份数据 ...

  2. 如何用Java解析CSV文件

    首先看一下csv文件的规则: csv(Comma Separate Values)文件即逗号分隔符文件,它是一种文本文件,可以直接以文本打开,以逗号分隔.windows默认用excel打开.它的格式包 ...

  3. tableview在第一次显示时会自动relodata

    tableview在第一次显示时会自动加载数据

  4. 遇到could not find developer disk image 问题怎么解决

    一般是设备的版本低于或者高于当前的xcode

  5. ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转载)

    原文地址: http://www.trinea.cn/android/arraylist-linkedlist-loop-performance/ 原文地址: http://www.trinea.cn ...

  6. 20145207 《Java程序设计》第10周学习总结

    前言:   最后一篇java博客好激动啊..不过猜猜我在干什么?没错,安虚拟机,唉!紧接着又是一大波信安系统的博客,真开心~好啦边敲博客,边装虚拟机. 教材知识汇总 13.1 网络概述 13.1.1计 ...

  7. [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. 是否可以继承String类?

    是否可以继承String类? String类是final类故不可以继承

  9. 配置文件App.config的使用以及Readonly与Const的对比

    以前我们学习的时候都把连接数据库的连接字符串写在一个类中,因为我们的数据库都在自己电脑上.如果更换数据库地址,需要更改这个类,然后重新编译才可以连接到数据库.现在我们需要将连接字符串当道一个文件中,然 ...

  10. phpredis 订阅者模式

    [TOC] 一.场景介绍 最近的一个项目需要用到发布/订阅的信息系统,以做到最新实时消息的通知.经查找后发现了redis pub/sub(发布/订阅的信息系统)可以满足我的开发需求,而且学习成本和使用 ...