java实现map和object互转的三种方法
/**
* 使用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互转的三种方法的更多相关文章
- Java/JSP获得客户端网卡MAC地址的三种方法解析
java/jsp获得客户端(IE)网卡MAC地址的方法大概有三种. 1.通过命令方式,在客户端执行Ipconfig 等等.(java/jsp) 2.通过ActiveX的方法.(jsp) 3.通过向13 ...
- java将doc文件转换为pdf文件的三种方法
http://feifei.im/archives/93 —————————————————————————————————————————————— 项目要用到doc转pdf的功能,一番google ...
- Java Web开发中用Tomcat部署项目的三种方法
第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加: <Context path="/hello" docBase ...
- Java多线程:向线程传递参数的三种方法
在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果.但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别.由于线程 ...
- Java中实现十进制数转换为二进制的三种方法
第一种:除基倒取余法 这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒着依次排列,就构成了转换后的二进制数 ...
- map和object互转的几种方式
1.使用Apache中的BeanUtils类,导入commons-beanutils包. 2.使用JSON 3.利用java.lang.reflect.Field类完成Obj和Map之间的相互转换 h ...
- java中判断字符串是否为数字的三种方法
以下内容引自 http://www.blogjava.net/Javaphua/archive/2007/06/05/122131.html 1用JAVA自带的函数 public static ...
- java判断一个字符串是否是数字的三种方法
参考https://blog.csdn.net/ld_flex/article/details/7699161 1 用JAVA自带的函数 public static boolean isNumeric ...
- Java 判断字符串能否转化为数字的三种方法
用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ if (! ...
随机推荐
- jQuery:多个AJAX/JSON请求对应单个回调并行加载
因为我们使用jQuery,这意味着需要调用 jQuery.getScript 和 jQuery.getJSON 函数. 我知道这些函数都是异步执行(asyncronously)并且会延迟一段时间返回, ...
- Dive into python 实例学python (2) —— 自省,apihelper
apihelper.py def info(object, spacing=10, collapse=1): """Print methods and doc strin ...
- java一般要点
1.String是引用类型. 2.char, short, byte在进行运算的时候会自动转换成int类型数据., 3.数据A 异或同一个数两次,得到的还是A 4.java的for循环,可以在前面加一 ...
- 12---Net基础加强
使用ShowDialog窗体之间的回传值: using System; using System.Collections.Generic; using System.ComponentModel; u ...
- [MaxOSX] 路由操作
查看当前路由情况 netstat -nr 添加路由 sudo route -n add x.x.x.x/24 x.x.x.x 可以简单这样子理解: 第1个参数 x.x.x.x/24是远程地址 第2个参 ...
- C++字符串和string类介绍
一.C风格字符串 ◆ 1.字符串是用字符型数组存储的,字符串要求其尾部以'\0'作为结束标志.如: char string[ ]="C++ programming language&q ...
- android 学习随笔六(网络要求及配置)
android在4.0之后已经不允许在主线程执行http请求了. 主线程阻塞,应用会停止刷新界面,停止响应用户任何操作,耗时操作不要写在主线程 只有主线程才能修改UI ANR异常:Applicat ...
- sql回滚
rollback是针对事务的,你如果没有在执行语句之前开启事务,那么无法rollback,建议你还是想别的办法吧,事务语句如下(sqlserver的给你借鉴):--开启事务begin tran --执 ...
- javaWeb 使用 jsp 和 javaBean 实现计算器功能
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- jQuery 文档操作方法(w3school)
这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 方法 描述 addClass() 向匹配的元素添加指定的类名. after() 在匹配的元素之后插入内容. append( ...