2012-04-24 2 views
0

Недавно я обсудил с коллегой о том, как сравнить 2 экземпляра одного и того же класса Java.Сравнение автоматических атрибутов Java

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

Вот пример использования: У вас есть профиль пользователя с большим количеством полей, и пользователь отправляет новый профиль, вы хотите знать, какие поля были изменены, чтобы иметь возможность отображать что-то вроде «успешно изменил ваш день рождения», , название улицы ... "

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

Мне было интересно, существует ли какой-либо автоматический метод (например, из внешней библиотеки), не указывая вручную каждый атрибут вручную.

Btw, если hibernate имеет метод, который мог бы сделать это, чтобы сравнить локальный и объект базы данных, он мог бы сделать трюк.

+0

Надеюсь, что это помогает, подобно нити - http://stackoverflow.com/questions/369512/best-way-to-compare-objects-by-multiple-fields –

+1

Вы могли бы использовать отражение для этой цели (используя 'getClass(). getDeclaredFields()') или что-то в этом роде. Но я бы предположил, что кто-то уже написал и опубликовал такой код, так что, возможно, кто-то знает об этом. –

ответ

2

Использование отражения, как отметил Гийом Полет. Я также разместил аннотацию на полях, которые должны быть показаны так. Если вам не нравится идея открытых полей, используйте методы getX() с аннотациями. Я не знаю никакого библиотечного кода для сравнения; но писать было недолго.

+0

Хорошо спасибо, вот что я подумал. – Estragon