简单的java 反射机制实践 map 与object对象的转换

public static void main(String[] args)throws Exception { 
Member member = new Member();
member.setDate(new Date());
member.setId("aaaa");
member.setName("sssss");
member.setSarlary(1000);
Map map = Objcet2Map(member);
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Entry e = (Entry) iterator.next();
System.out.println(e.getKey()+"->"+e.getValue());
}
System.out.println(map2Object(member.getClass(), map));
}
/**
* 目标实体转换为map集合
* @param object   对象
* @return   map   集合
* @throws Exception
*/
public static Map Objcet2Map(Object obj) throws Exception {
Map map = new HashMap<String, Object>();
Class clazz = obj.getClass();
//获取所有属性
Field[] fields = clazz.getDeclaredFields();
//迭代属性数组
for (Field field : fields) {
//获取属性名
String name =field.getName();
//拼接get方法名
String methodName = "get"+name.substring(0,1).toUpperCase()+name.substring(1,name.length());
//获取方法
Method method = clazz.getDeclaredMethod(methodName);
//执行方法
Object value = method.invoke(obj);
map.put(name, value);
}
return map;
}

/**
* 把一个map集合转化为目标对象
* @param clazz 目标对象的字节码对象
* @param map map集合
* @return 字节码对象生产的目标对象
*/
public static Object map2Object(Class clazz,Map map) throws Exception {
//构造迭代器
Iterator iterator = map.entrySet().iterator();
//根据字节码生产对象
Object obj = clazz.newInstance();
//迭代map集合
while (iterator.hasNext()){
//Entry <K,V> 
Entry e = (Entry) iterator.next();
//获取Key 和 Value
String key = (String) e.getKey();
Object value = e.getValue();
//根据属性名称获取属性 
Field field = clazz.getDeclaredField(key);

//拼接set方法名     因为  field.set(obj, value)方法不允许修改private 的属性
String methodName = "set"+key.substring(0,1).toUpperCase()+key.substring(1,key.length());
//根据方法名称和参数类型获取方法
Method method = clazz.getDeclaredMethod(methodName,field.getType());
//执行方法
method.invoke(obj,value);
}

return obj;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值