1. 程式人生 > >簡單的java 反射機制實踐 map 與object物件的轉換

簡單的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;
}