2014-11-12 3 views
0

이미 약간의 질문이 herethere입니다.두 Java 객체의 심도 비교

사용 사례 - 재산에 의한 Two objects을 감안할 때

1), 둘 다의 compare 속성입니다.

2) 그것은 윌 (가령 Residential Address, Office Address)는 양쪽에 두 항목을 포함하고 또한, 지금 의미 내가 List<Address>이 있다고 이제 동일한 데이터가 거꾸로 될 수 컬렉션 내부의 두 객체들의 집합을 비교 Collections 포함 두 목록 모두에서 데이터가 다른 인덱스에있을 수 있습니다.

3. 동일한 유형의 3rd Object을 작성해야하며 유사한 데이터가 복사되고 속성이 다른 데이터로 null로 설정되어야합니다.

4. 참조 클래스도있을 수 있습니다.

나는 많은 해결책을 피웠지 만 어딘가에 달라 붙었는데, 나는 일반적인 솔루션을 쓰려고 생각하고있다. 하지만 두 객체 중 generating two xml's 중에서 노드를 비교하지만 더 많은 옵션을 원합니다.

또는이 경우에 얼마나 더 약한가 Java reflection.

+0

이것은 정말로 어려운 것 같습니다. 리플렉션을 사용하지 않을 것이므로 개인 필드와 개인 객체에 안정적으로 액세스 할 수 없습니다. 아마도 Kryo와 비슷한 결과물을 파싱 할 수도 있지만 꽤 털이 있습니다. – markspace

+0

@markspace 안녕하세요, 귀하의 의견에 대한 답변을 게시, dnt knw 나는 대답이나 의견으로 게시해야 할 경우. –

답변

0

@markspace 질문에 대한 답변입니다.

는이 private field 당신이 Class.getDeclaredField(String name) 또는 Class.getDeclaredFields() 메소드를 호출해야합니다에 액세스하려면. Class.getField(String name)Class.getFields() 메서드는 return public fields 메서드 만 사용할 수 있으므로 작동하지 않습니다.

private method에 액세스하려면 Class.getDeclaredMethod(String name, Class[] parameterTypes) 또는 Class.getDeclaredMethods() 방법으로 전화해야합니다. 방법은 Class.getMethod(String name, Class[] parameterTypes)Class.getMethods() 방법 만 return public methods입니다.

XMLUnit가 작동하면 목록 참조를 재귀 적으로 비교하고 비교하고 싶지 않은 입력란을 제외시킬 수도 있습니다.

RecursiveElementNameAndTextQualifier

String expectedXML = "some xml"; 
String actualXML = "some xml"; 

DetailedDiff diff1 = new DetailedDiff(XMLUnit.compareXML(expectedXML, actualXML)); 
diff1.overrideElementQualifier(new RecursiveElementNameAndTextQualifier()); 
System.out.println("Differences found: " + diff1.getAllDifferences().toString()); 

는 XML의 두 가지에있는 모든 요소와 텍스트 노드를 비교합니다. 다른 순서로 반환되지만 동일한 내용의 을 비교할 수있는 복잡하고 깊이 중첩 된 유형의 요소를 허용합니다.