Это довольно сложная задача, чтобы попытаться решить обобщенно. Вы можете рассмотреть возможность создания шаблона Visitor, который позволяет добавлять функциональные возможности к графику объектов с шаблоном Chain of Responsibility, который позволяет разделить ответственность за выполнение задачи на несколько объектов, а затем динамически направлять запросы на правый обработчик.
Если вы сделали это, вы могли бы генерировать простую и специфическую логику дифференцирования для каждого типа без единого массивного класса, который обрабатывал бы все ваши задачи дифференциации. Также было бы легко добавить обработчики к дереву.
Лучшая часть состоит в том, что у вас все еще есть ссылка в вашей Цепи ответственности за «плоские» объекты (объекты, которые не являются коллекциями и в основном имеют только прозвища), в которых отражение в любом случае поможет вам в любом случае. Если вы используете «все-все», использует простое сравнение на основе отражения, а ваши «специальные» дела обрабатывают такие вещи, как списки, словари и наборы, тогда у вас будет гибкое, поддерживаемое и недорогое решение.
Для получения дополнительной информации:
Смотрите также http://stackoverflow.com/questions/578209/общего алгоритм-в-генераторный-а-Diff-оф-полей-в-два-бобов. –
В Commons BeanUtils есть новое предложение: http://issues.apache.org/jira/browse/BEANUTILS-304 Непонятно, когда это будет окончательно. – BalusC