有什么方法可以使用 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)
)。但是基于EqualsBuilder
(it 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;
}
}
在使用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)
)。但是基于EqualsBuilder
(it 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;
}
}