как приравнять два объекта в Java - PullRequest
2 голосов
/ 29 февраля 2012

Есть ли способ, которым мы можем приравнять два объекта?

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

Теперь объект может иметь 1 атрибут или 2 атрибута или 100 атрибутов.и мне нужно сравнить каждый атрибут, чтобы в итоге он оказался равным.

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Вы можете взглянуть на Apache Commons вспомогательные классы EqualsBuilder и HashCodeBuilder .Эти классы предоставляют методы для построения хорошего метода equals и hashCode для любого класса.

0 голосов
/ 29 февраля 2012

Если вы не хотите использовать равные или компаратор, вы можете попробовать сделать это с помощью отражения.

Перебрать поля двух объектов и сравнить их -

Field[] fields1 = o1.getClass().getDeclaredFields();
Field[] fields2 = o2.getClass().getDeclaredFields();

for (int i = 0; i++ ; i>fields.lenght) {
 // compare the two fields under the assumption that if the two
 // objects are the same their fields will be the same in each iteration
}

используйте field.get(Object), чтобы получить значение поля

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

0 голосов
/ 29 февраля 2012

Это можно сделать с помощью отражения.Если вы не хотите писать свою собственную утилиту, вы можете использовать что-то вроде Unitils , которая предоставляет класс с именем ReflectionAssert .

См. Также Isесть утилита отражения Java для глубокого сравнения двух объектов?

...