/**
 * 使用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. contentProvider

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  2. jsformat插件

    Package Control Package Control 是用来管理 Sublime Text 2 的插件的插件. 也是装完后第一个要安装的插件. 首先打开 ctrl+`, 并在打开的 st2 ...

  3. paper 50 :人脸识别简史与近期进展

    自动人脸识别的经典流程分为三个步骤:人脸检测.面部特征点定位(又称Face Alignment人脸对齐).特征提取与分类器设计.一般而言,狭义的人脸识别指的是"特征提取+分类器"两 ...

  4. paper 10:支持向量机系列七:Kernel II —— 核方法的一些理论补充,关于 Reproducing Kernel Hilbert Space 和 Representer Theorem 的简介。

    在之前我们介绍了如何用 Kernel 方法来将线性 SVM 进行推广以使其能够处理非线性的情况,那里用到的方法就是通过一个非线性映射 ϕ(⋅) 将原始数据进行映射,使得原来的非线性问题在映射之后的空间 ...

  5. 【pyQuery分析实例】分析体育网冠军联盟比赛成绩

    目标地址:http://www.espncricinfo.com/champions-league-twenty20-2012/engine/match/574265.html liz@nb-liz: ...

  6. 【fedora】设置中文为默认语言

    安装Fedora时,界面语言是英语,手动安装简体中文语言包: 1.打开终端,执行yum install system-config-language命令来安装语言套件: 2.然后执行system-co ...

  7. 【转】“C语言说到底是一门以内存为中心的编程语言” —— 这种说法正确吗?

    转自:http://weibo.com/1005903613/AAgqA3kb4  LAW张粑粑的微博

  8. 搭建无限制权限的简单git服务器使用git-daemon脚本

    如果想要用ubantu架设无限制权限(即不适用gitosis)的简单git服务器,实现git库下载clone,push等简单的基本功能, 可以直接使用git-daemon脚本(非常不安全,建议项目代码 ...

  9. COM编程之五 动静态链接

    [1]静态链接 静态链接是指由链接器在链接时将库的内容加入到可执行程序中的做法. 链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序. 函数和数据被编译 ...

  10. Linux USB摄像头驱动【转】

    本文转载自:http://www.itdadao.com/articles/c15a509940p0.html 在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 ...