I am trying to validate serialize and de-serialize routines by comparing the resulting object with the original object. The routines can serialize arbitrary and deeply nested classes and consequently I want a comparison routine which can be given the original and final instance and reflectively walk through each value type and compare the values and iteratively dive into reference types to compare values.
I have tried the Apache Commons Lang EqualsBuilder.reflectionEquals(inst1, inst2)
but this does not appear to do a very deep comparison, it simply compares reference types for equality rather than diving deeper into them:
The following code illustrates my issue. The first call to reflectionEquals
returns true but the second returns false.
Is there a library routine anyone could recommend?
class dummy {
dummy2 nestedClass;
}
class dummy2 {
int intVal;
}
@Test
public void testRefEqu() {
dummy inst1 = new dummy();
inst1.nestedClass = new dummy2();
inst1.nestedClass.intVal = 2;
dummy inst2 = new dummy();
inst2.nestedClass = new dummy2();
inst2.nestedClass.intVal = 2;
boolean isEqual = EqualsBuilder.reflectionEquals(inst1.nestedClass, inst2.nestedClass);
isEqual = EqualsBuilder.reflectionEquals(inst1, inst2);
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…