package net.peace.ref;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
public class Test {
/**
*
* @Title: setValues
* @Description: 实现把map的值动态赋值到一个类的实例(由传入的类实例化)中。并返回这个实例
* @param map 用来包含数据值(key-属性名称,value-对应的值)
* @param cls 传入的类型
* @return :Object 已经赋值的对象
* @throws :Exception
* @author peace w_peace@163.com
*/
public static Object setValues(Map map,Class cls)throws Exception{
//获得传入类的实例
Object obj=cls.newInstance();
//获得类所有的属性
Field fs[]=cls.getDeclaredFields();
for(Field f:fs){
//判断map中是否有对应的属性
if(map.containsKey(f.getName()))
{
//将可访问设置为true
f.setAccessible(true);
//赋予相应的值,哪怕是private的属性这边也可以赋值,表现出了反射的强大;
f.set(obj, map.get(f.getName()));
}
}
return obj;
}
public static void main(String[] args) {
//建立相应的map
Map map=new HashMap();
map.put("id", 123);
map.put("name","peace");
try {
//调用属性赋值方法
User user =(User)setValues(map, User.class);
System.out.println(user);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}