객체 비교 속성

1899 단어 대상
수요: 데이터베이스에 있는 두 개의 기록 중의 모든 속성을 비교한다. 그 중 하나는 이미 심사한 것이기 때문에 심사하지 않은 데이터 중의 서로 다른 속성을 페이지에 표시해야 한다. 예를 들어 필드 T1이 다르면 T1은 빨간색이다.
해결 방향: JAVA 반사 메커니즘을 이용하여 두 대상을 비교하고 서로 다른 속성 값이 있으면 이 속성 값을'1@'+value로 바꾸고 그렇지 않으면'0@'+value로 바꾸고 페이지에서 판단하고 표시를 캡처한다.
 
public static Object CompareObj(Object obj1, Object obj2) {
		//  obj1 
		Class obj1Class = obj1.getClass();
		Method[] obj1methods = obj1Class.getDeclaredMethods();
		//  obj2 
		Class obj2Class = obj2.getClass();
		Method[] obj2methods = obj2Class.getDeclaredMethods();
		//  obj2 MAP , 
		Map obj2MeMap = new HashMap();
		for (int i = 0; i < obj2methods.length; i++) {
			Method method = obj2methods[i];
			obj2MeMap.put(method.getName(), method);
		}
		for (int i = 0; i < obj1methods.length; i++) {
			String methodName = obj1methods[i].getName();
			if (methodName != null && methodName.startsWith("get")) {
				//  FIELD
				try {
					//  obj1 getXXXX 
					Object returnObj = obj1methods[i].invoke(obj1, new Object[0]);
					Object returnObj2 = obj1methods[i].invoke(obj2, new Object[0]);
					//  obj2 
					Method obj2method = (Method) obj2MeMap.get("set" + methodName.split("get")[1]);
					//  obj2 setXXX 
					if (returnObj2 != null) {
						if (returnObj == null) {
							obj2method.invoke(obj2, "0@" + returnObj2);
						} else {
							if (returnObj.equals(returnObj2)) {
								obj2method.invoke(obj2, "0@" + returnObj2);
							} else {
								obj2method.invoke(obj2, "1@" + returnObj2);
							}
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return obj2;
	}

좋은 웹페이지 즐겨찾기