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

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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值