Вы на самом деле не утверждаете равенство, а скорее делаете "diff". Ясно, что значение «один и тот же» зависит от конкретной логики для каждого типа, и представление различий также может варьироваться. Одно из основных отличий этого требования от обычного equals () состоит в том, что обычно equals () останавливается, как только будет замечено первое различие, вы захотите продолжить и сравнить каждое поле.
Я бы посмотрел на повторное использование некоторых шаблонов equals (), но я подозреваю, что вам нужно написать свой собственный код.