通過反射獲取修改前與修改後物件的屬性
阿新 • • 發佈:2018-12-14
public static Map<String, Map<String, String>> compile(Object old_,Object new_) { Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();//存放修改前與修改後的屬性值 Class<Object> cOld_ = (Class<Object>) old_.getClass(); Field[] filesDb = cOld_.getDeclaredFields(); Class<Object> cNew_ = (Class<Object>) new_.getClass(); Map<String, String> valDbMap = new HashMap<String, String>();//存放修改前的已修改的值 Map<String, String> valNewMap = new HashMap<String, String>();//存放修改後的值 for (Field field : filesDb) { String getMethodName = "get" + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); try { Method mdb = (Method) cOld_.getMethod(getMethodName); Method mNew_ = (Method) cNew_.getMethod(getMethodName); try { Object valDb = mdb.invoke(old_); Object valNew = mNew_.invoke(new_); if (valDb != null) { if (!valDb.equals(valNew)) { valDbMap.put(field.getName(), String.valueOf(valDb)); valNewMap.put(field.getName(), String.valueOf(valNew)); } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } catch (NoSuchMethodException e) { } catch (SecurityException e) { e.printStackTrace(); } } map.put("更改前", valDbMap); map.put("更改後", valNewMap); return map; }