Глубокое отражающее сравнение равно

Я пытаюсь проверить сериализацию и десериализацию подпрограмм, сравнивая результирующий объект с исходным объектом. Подпрограммы могут сериализовать произвольные и глубоко вложенные классы, и, следовательно, мне нужна процедура сравнения, которой можно было бы дать исходный и конечный экземпляр, а также рефлексивно пройтись по каждому типу значения, сравнить значения и итеративно погрузиться в ссылочные типы для сравнения значений.

Я попробовал Apache Commons LangEqualsBuilder.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);
}

14
задан Duncan Jones 11 August 2014 в 12:20
поделиться