package com.dume.server.face;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
/**
* 写一个Map转换成JavaBean的工具类方法,实现如下mapToObject方法(使用Java反射,不允许使用第三方类库)
*
* public static <T> T mapToObject(Map<String, Object> map, Class<T> beanClass){
*
* }
*/
public class MapToObject {
public static Object maptoobject(Map<String, Object> map, Class<?> beanClass){
if(map == null){
return null;
}
Object object = null;
try{
object = beanClass.newInstance();
/**
* 获取所有字段属性,不包括父类的
*/
Field[] fields = object.getClass().getDeclaredFields();
for(Field field : fields){
//获取属性类型
int mod = field.getModifiers();
//判断不能是静态和Final属性
if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){
continue;
}
//作用就是让我们在用反射时访问私有变量
field.setAccessible(true);
//将指定对象变量上此 Field 对象表示的字段设置为指定的新值.
field.set(object,map.get(field.getName()));
}
}catch (Exception e){
e.printStackTrace();
}
return object;
}
static class Student{
private String name ;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public static void main(String[] args) {
Map<String, Object> map = new HashMap();
map.put("age",20);
map.put("name","xiaoming");
Student student = (Student)maptoobject(map, Student.class);
System.out.println(student.toString());
}
}