Class EqualsBuilder

java.lang.Object
org.aoju.bus.core.builder.EqualsBuilder
All Implemented Interfaces:
Serializable, Builder<Boolean>

public class EqualsBuilder extends Object implements Builder<Boolean>
Object.equals(Object) 方法的构建器 两个对象equals必须保证hashCode值相等 ,hashCode值相等不能保证一定相等

使用方法如下:

 public boolean equals(Object object) {
   if (null == object) { return false; }
   if (object == this) { return true; }
   if (object.getClass() != getClass()) {
     return false;
   }
   MyClass rhs = (MyClass) object;
   return new EqualsBuilder()
                 .appendSuper(super.equals(object))
                 .append(field1, rhs.field1)
                 .append(field2, rhs.field2)
                 .append(field3, rhs.field3)
                 .isEquals();
  }

 public boolean equals(Object object) {
   return EqualsBuilder.reflectionEquals(this, object);
 }
 
Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Constructor Details

    • EqualsBuilder

      public EqualsBuilder()
      构造,初始状态值为true
  • Method Details

    • reflectionEquals

      public static boolean reflectionEquals(Object lhs, Object rhs, Collection<String> excludeFields)
      反射检查两个对象是否equals,此方法检查对象及其父对象的属性(包括私有属性)是否相等
      Parameters:
      lhs - 此对象
      rhs - 另一个对象
      excludeFields - 排除的字段集合,如果有不参与计算equals的字段加入此集合即可
      Returns:
      两个对象是否equals, 是返回true
    • reflectionEquals

      public static boolean reflectionEquals(Object lhs, Object rhs, String... excludeFields)
      反射检查两个对象是否equals,此方法检查对象及其父对象的属性(包括私有属性)是否相等
      Parameters:
      lhs - 此对象
      rhs - 另一个对象
      excludeFields - 排除的字段集合,如果有不参与计算equals的字段加入此集合即可
      Returns:
      两个对象是否equals, 是返回true
    • reflectionEquals

      public static boolean reflectionEquals(Object lhs, Object rhs, boolean testTransients)
      此方法使用反射来确定两个对象是否相等
      Parameters:
      lhs - 对象
      rhs - 其他对象
      testTransients - 是否测试忽略
      Returns:
      true如果两个对象已测试相等.
      See Also:
    • reflectionEquals

      public static boolean reflectionEquals(Object lhs, Object rhs, boolean testTransients, Class<?> reflectUpToClass, String... excludeFields)
      此方法使用反射来确定两个对象是否相等
      Parameters:
      lhs - 对象
      rhs - 其他对象
      testTransients - 是否测试忽略
      reflectUpToClass - 要反映到(包括)的超类可以是null
      excludeFields - 要从测试中排除的字段名的数组
      Returns:
      true如果两个对象已测试相等
    • appendSuper

      public EqualsBuilder appendSuper(boolean superEquals)
      super.equals()的结果添加到此构建器
      Parameters:
      superEquals - 调用 super.equals()的结果
      Returns:
      EqualsBuilder - 自定义返回链
    • append

      public EqualsBuilder append(Object lhs, Object rhs)
      使用两个equals方法比较两个Object是否相等
      Parameters:
      lhs - 左边对象
      rhs - 右边对象
      Returns:
      EqualsBuilder - 自定义返回链
    • append

      public EqualsBuilder append(long lhs, long rhs)
      比较两个long是否相等
      Parameters:
      lhs - 左边对象
      rhs - 右边对象
      Returns:
      EqualsBuilder - 自定义返回链
    • append

      public EqualsBuilder append(int lhs, int rhs)
      比较两个int是否相等
      Parameters:
      lhs - 左边对象
      rhs - 右边对象
      Returns:
      EqualsBuilder - 自定义返回链
    • append

      public EqualsBuilder append(short lhs, short rhs)
      比较两个short是否相等
      Parameters:
      lhs - 左边对象
      rhs - 右边对象
      Returns:
      EqualsBuilder - 自定义返回链
    • append

      public EqualsBuilder append(char lhs, char rhs)
      比较两个char是否相等
      Parameters:
      lhs - 左边对象
      rhs - 右边对象
      Returns:
      EqualsBuilder - 自定义返回链
    • append

      public EqualsBuilder append(byte lhs, byte rhs)
      比较两个byte是否相等
      Parameters:
      lhs - 左边对象
      rhs - 右边对象
      Returns:
      EqualsBuilder - 自定义返回链
    • append

      public EqualsBuilder append(double lhs, double rhs)
      通过比较doubleToLong返回的位的模式是否相等来比较两个double是否相等
      Parameters:
      lhs - 左边对象
      rhs - 右边对象
      Returns:
      EqualsBuilder - 自定义返回链
    • append

      public EqualsBuilder append(float lhs, float rhs)

      Test if two floats are equal byt testing that the pattern of bits returned by doubleToLong are equal.

      This handles NaNs, Infinities, and -0.0.

      It is compatible with the hash code generated by HashCodeBuilder.

      Parameters:
      lhs - 左边对象 float
      rhs - 右边对象 float
      Returns:
      EqualsBuilder - 自定义返回链
    • append

      public EqualsBuilder append(boolean lhs, boolean rhs)
      比较两个boolean是否相等
      Parameters:
      lhs - 左边对象 boolean
      rhs - 右边对象 boolean
      Returns:
      EqualsBuilder - 自定义返回链
    • isEquals

      public boolean isEquals()
      如果已选中的字段全部相等,则返回true
      Returns:
      boolean
    • setEquals

      protected EqualsBuilder setEquals(boolean isEquals)
      设置isEquals
      Parameters:
      isEquals - 设定值
      Returns:
      this
    • build

      public Boolean build()
      如果已选中的字段全部相等,则返回true
      Specified by:
      build in interface Builder<Boolean>
      Returns:
      如果所有已检查的字段都相等,则true否则false
    • reset

      public void reset()
      重置EqualsBuilder,以便您可以再次使用同一对象