`
clplain
  • 浏览: 8609 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

利用反射技术,实现为实体类的属性赋值

阅读更多

//利用反射技术,实现为实体类的属性赋值

package org.reflect.reflecttest;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.reflect.entity.Student;
import org.reflect.entity.User;

/**
* 利用反射技术,实现为实体类的属性赋值
* @author clplain;
*
*/
public class SetValue {
/**
* 赋值方法
* @param cla:表示将要给那个类的属性赋值,表示类
* @param maps:key表示属性名,value表示值
* @return
*/
public static Object setValue(Class cla,Map<String,Object> maps){
/**
* 1.创建一个类的对象
* 2.调用该对象的set方法赋值
* 2.1.获得方法名
* 2.1.1、根据属性名获得方法名
* 2.2.调用方法
* 3.返回已经赋值的对象
*/
Object obj = null;

try {
//根据类的反射,创建这个类的对象
obj = cla.newInstance();
//获得属性名,Map中保存了所有的属性的名字(key)
//获得所有的key\
Set keySet = maps.keySet();//获得存储所有key的Set集合
//迭代所有set集合
Object[] keyObjs = keySet.toArray();//将set集合转换为Object数组
for(Object keyName : keyObjs){//数组中的每个元素都是一个属性名
String fieldName = keyName.toString();
//根据属性名获得属性
Field field = cla.getDeclaredField(fieldName);
//根据属性名获得方法名
String methodName = "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
//根据方法名获得方法
Method method = cla.getDeclaredMethod(methodName, field.getType());
//参数1,表示对象,参数2, 给方法赋的值
method.invoke(obj, maps.get(keyName));//调用方法,等同于obj.method(maps.get(keyName));
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return obj;
}
public static void main(String[] args) {
/**
*测试方法为实体类User赋值;
*/
Map<String,Object> map = new HashMap<String,Object>();
map.put("uid", 1);
map.put("uname", "chenlong");
map.put("upass", "男");
User user = (User) setValue(User.class,map);
System.out.println(user.getUid()+","+user.getUname()+","+user.getUpass());
}
}

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics