有什么方法可以使用 EqualBuilder 获取不相等的字段

Is there any way to get what field wasn't equal using EqualBuilder

在使用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 个额外的(字符串)参数,例如:myAppend(T lhs, T rhs, String name))。但是基于EqualsBuilderit is quite intelligent,一旦检测到不等则停止比较),只能得到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;
    }

}