Есть ли способ получить то, что поле не было равно, используя EqualBuilder - PullRequest
3 голосов
/ 13 марта 2020

Есть ли способ получить какое поле и соответствующее значение, вызвавшее неравенство при использовании EqualBuilder

@Override
    public boolean equals(Object o) {
    Meeting meeting = (Meeting) o;
    EqualsBuilder equalsBuilder = new EqualsBuilder();
            return equalsBuilder.append(basicMeetingInformation, meeting.basicMeetingInformation).append(subject, meeting.subject)
                    .append(emailParticipants, meeting.emailParticipants).append(ownerEmail, meeting.ownerEmail).append(timeZone, meeting.timeZone)
                    .append(start, meeting.start).append(end, meeting.end).append(notes, meeting.notes).append(recurrence, meeting.recurrence)
                    .append(recurrenceEnd, meeting.recurrenceEnd).append(recurrentInstanceId, meeting.recurrentInstanceId)
                    .append(scheduledMeetingRooms, meeting.scheduledMeetingRooms).isEquals();
}

1 Ответ

1 голос
/ 14 марта 2020

Нет, вы можете легко иметь собственное расширение (с 1 дополнительным (String) параметром, например: myAppend(T lhs, T rhs, String name)). Но на основе EqualsBuilder ( он достаточно интеллектуален и перестает сравнивать, как только обнаруживается неравенство), вы можете получить только поле и значение first , которое нарушает уравнение, например:

import java.util.Map;
import java.util.TreeMap;
import org.apache.commons.lang3.builder.EqualsBuilder;

public class MyEqualsBuilder extends EqualsBuilder {

    private final Map<String, Object> violatedFieldValues = new TreeMap<>();

    /**
    * @param name - the name of appended property.
    * @see #append
    **/
    public <T> EqualsBuilder myAppend(T lhs, T rhs, String name) {
        assert (null != name);
        append(lhs, rhs);
        if (violatedFieldValues.isEmpty() && !isEquals()) {
            violatedFieldValues.put(name, rhs);
        }
        return this;
    }

    /** 
    * Gets the Map of field name to (right hand) value,
    * which first violated the equality of this equals builder.
    * Contains 0 - 1 entries.
    **/  
    public Map<String, Object> getViolatedFieldValues() {
        return violatedFieldValues;
    }

}
...