31 Mart 2019 Pazar

Lang3 EqualsBuilder Sınıfı

Giriş
Şu satırı dahil ederiz.
import org.apache.commons.lang3.builder.EqualsBuilder;
Bu sınıfın en son isEquals() metodunu çağırmak lazım. Eğer hangi alanın eşitliği bozduğunu bulmak istersek şöyle yaparızz
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;
  }
}

append metodu
Örnek
Şöyle yaparız.
@Override
public boolean equals(Object o) {
  if (!(o instanceof Admin)) {
    return false;
  }
  Admin otherAdmin  = (Admin) o;
  EqualsBuilder builder = new EqualsBuilder();
  builder.append(getUserName(), otherAdmin.getUserName());
  return builder.isEquals();
}
appendSuper metodu
Ata sınıf varsa kullanılır.
Örnek
Şöyle yaparız.
public boolean equals(Object obj) {
  ...
  MyClass other = (MyClass) obj;
  return new EqualsBuilder()
    .appendSuper(super.equals(obj))
    .append(field1, other.field1)
    .append(field2, other.field2)
    .isEquals();
}
reflectionEquals metodu - Object + Object
Örnek
Şöyle yaparız.
@Override
public boolean equals(Object o) {
  return EqualsBuilder.reflectionEquals(this, o);
}
reflectionEquals metodu - Object + Object + Collection
Üçüncü parametre excludeFields anlamına gelir.
Örnek
Şöyle yaparız.
@Override
public boolean equals(Object o) {
 return EqualsBuilder.reflectionEquals(this, o, Arrays.asList(id));
}
reflectionEquals metodu - Object + Object + boolean
Üçüncü parametre testTransients anlamına gelir.
Örnek
Şöyle yaparız.
public class Address {

  private String addressKey;
  private String postalCode;
  private String country;
  ...

  @Override
  public boolean equals(Object obj) {
    return EqualsBuilder.reflectionEquals(this, obj, false);
  }
  ...
}