Я пытаюсь проверить процедуры сериализации и де-сериализации, сравнивая полученный объект с исходным объектом. Подпрограммы могут сериализовать произвольные и глубоко вложенные классы, и, следовательно, мне нужна процедура сравнения, которой может быть предоставлен исходный и последний экземпляр, и отражательно пройти через каждый тип значения и сравнить значения и итеративно погрузиться в ссылочные типы для сравнения значений.
Я попробовал Apache Commons Lang EqualsBuilder.reflectionEquals(inst1, inst2)
, но это, похоже, не очень глубокое сравнение, оно просто сравнивает ссылочные типы для равенства, а не погружения глубже в них:
Следующий код иллюстрирует мою проблему. Первый вызов reflectionEquals
возвращает true, а второй возвращает false.
Есть ли библиотека, которую кто-то может рекомендовать?
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);
}