使用反射将map转为对象,如果不使用反射的话需要一个get一个set写起来麻烦,并且不通用,所以写了一个通用的方法将map集合转为对象,直接看代码,注释也都挺清楚的
public
static
<T> T map2Object(Map<String, Object> map, Class<T> clazz) {
SimpleDateFormat sdf =
new
SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"
);
if
(map ==
null
) {
return
null
;
}
T obj =
null
;
try
{
// 使用newInstance来创建对象
obj = clazz.newInstance();
// 获取类中的所有字段
Field[] fields = obj.getClass().getDeclaredFields();
for
(Field field : fields) {
int
mod = field.getModifiers();
// 判断是拥有某个修饰符
if
(Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
continue
;
}
// 当字段使用private修饰时,需要加上
field.setAccessible(
true
);
// 获取参数类型名字
String filedTypeName = field.getType().getName();
// 判断是否为时间类型,使用equalsIgnoreCase比较字符串,不区分大小写
// 给obj的属性赋值
if
(filedTypeName.equalsIgnoreCase(
"java.util.date"
)) {
String datetimestamp = (String) map.get(field.getName());
if
(datetimestamp.equalsIgnoreCase(
"null"
)) {
field.set(obj,
null
);
}
else
{
field.set(obj, sdf.parse(datetimestamp));
}
}
else
{
field.set(obj, map.get(field.getName()));
}
}
}
catch
(Exception e) {
e.printStackTrace();
}
return
obj;
}