通过反射获取修改前与修改后对象的属性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33223299/article/details/82758633
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;
	}

猜你喜欢

转载自blog.csdn.net/qq_33223299/article/details/82758633
今日推荐