`

EqualsBuilder和HashCodeBuilder

    博客分类:
  • java
阅读更多
自动化hashCode()和equals()
  问题产生:当需要自动实现hashCode()和equals()方法
  解决方法:使用EqualsBuilder和HashCodeBuilder
  使用举例:

import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;

public class PoliticalCandidate {
    // Member variables - omitted for brevity
    // Constructors - omitted for brevity
    // get/set methods - omitted for brevity
    // A hashCode which creates a hash from the two unique identifiers

    public int hashCode( ) {
        return new HashCodeBuilder(17, 37)
                       .append(firstName)
                       .append(lastName).toHashCode( );
    }

    // An equals which compares two unique identifiers
    public boolean equals(Object o) {
        boolean equals = false;
        if ( o != null &&PoliticalCandidate.class.isAssignableFrom(o) ) {
            PoliticalCandidate pc = (PoliticalCandidate) o;
            equals = (new EqualsBuilder( )
                       .append(firstName, ps.firstName)
                       .append(lastName, ps.lastName)).isEquals( );
        }
        return equals;
    }

}

Discussion:
1.在上述例子中,当有相同的firstname和lastname时,认为两个对象的hashCode相同,从而equals()返回true.
如果hashCode取决于该class的所有filed时需要使用反射机制来产生一个hashCode。
public int hashCode( ) {
    return HashCodeBuilder.reflectionHashCode(this);
}
和ToStringBuilder 与 HashCodeBuilder一样 EqualsBuilder 也是使用append()方法进行配置,EqualsBuilder的append()方法可以接受基本类型、对象、数组作为参数。EqualsBuilder强大的地方在于可以直接把数组作为参数传入append()方法,EqualsBuilder会依次比较数组中的每个元素。
2.如果两个对象相等当且仅当每个属性值都相等 这句话可以由以下代码实现:
public boolean equals(Object o) {
    return EqualsBuilder.reflectionEquals(this, o);
}
分享到:
评论

相关推荐

    1_equals_overridingequals_

    在实践中,为了代码的可读性和一致性,可以考虑使用Apache Commons Lang库的EqualsBuilder和HashCodeBuilder,或者使用Lombok库的@EqualsAndHashCode注解,它们可以帮助我们更方便地生成这些方法。 总的来说,重写...

    eclipse插件 org.jiayun.commons4e

    4. 配置友好:org.jiayun.commons4e插件提供了丰富的配置选项,允许用户根据项目需求定制生成的代码格式,如是否忽略特定字段,是否使用Apache Commons Lang的EqualsBuilder和HashCodeBuilder等。 安装此插件,用户...

    JakartaCommons 详细教程更助于你的基础

    - CompareToBuilder、EqualsBuilder和HashCodeBuilder:提供了简化对象比较和哈希码计算的构建器模式方法。 - ToStringBuilder和ToStringStyle:用于自定义对象的toString()方法输出格式。 2. Jakarta Commons ...

    实用小工具:Java实体类对比、Json对比、字符串动态拼接等功能

    对比两个实体类,可能涉及到对象的属性比较,例如使用Apache的EqualsBuilder和HashCodeBuilder来实现对象的equals()和hashCode()方法,以确保对象内容一致时返回相同的结果。此外,还可以使用Lombok库的@...

    commons-lang

    6. EqualsBuilder/HashCodeBuilder提供了方便的方法来覆盖equals() 和hashCode()方法 7.以Range结尾的类主要提供一些范围的操作,包括判断某些字符,数字等是否在这个范围以内 8.ArrayUtils 提供了数组的复制,查找,...

    java list 比较详解及实例

    Equator interface 的实现可以使用 Apache Commons 的 EqualsBuilder 和 HashCodeBuilder 类。例如: ```java private static <T> Equator<T> generateEquator(final String... excludedFields) { Equator<T> ...

    line_compare

    10. **开源工具和库**:Java社区中有许多开源工具和库可以帮助进行文件比较,如DiffUtils、Apache Commons Lang的EqualsBuilder和HashCodeBuilder等。 综上所述,"line_compare"项目可能涉及到的Java技术点包括文件...

    allequals:Java equalshashCode 基准代码

    测试可能包括不同策略的比较,比如简单的属性比较、深比较、以及使用工具类如Apache Commons Lang的EqualsBuilder和HashCodeBuilder。 总结来说,`equals()` 和 `hashCode()` 在Java中是核心的比较和哈希机制,正确...

    Jakarta Commons CookBook学习笔记

    `EqualsBuilder` 和 `HashCodeBuilder` 是 Apache Commons Lang 包中提供的两个工具类,用于简化 `equals()` 和 `hashCode()` 方法的实现。这些方法对于 Java 对象来说非常重要,尤其是在将对象放入集合(如 HashSet...

    commons-lang3-3.3.2

    描述中的"hashCodeBuilder EqualsBuilder ToStringBuilder"提到了三个关键的类,它们都是Apache Commons Lang中用于构建对象哈希码、比较平等性和生成字符串表示的重要工具。 1. **HashCodeBuilder**: 在Java中,`...

    看例子练apache_commons之lang篇

    #### 十一、EqualsBuilder、HashCodeBuilder 和 ToStringBuilder 的应用 这三个类都是为了方便地创建 `equals()`、`hashCode()` 和 `toString()` 方法。 - **EqualsBuilder**: 构建 `equals()` 方法。 - **...

    apache-commons-lang.zip 源码

    此外,`EqualsBuilder`和`HashCodeBuilder`是构建自定义equals()和hashCode()方法的强大工具,它们遵循了Java equals()和hashCode()的一致性原则。`ToStringBuilder`则帮助创建对象的toString()方法输出,使得调试和...

    commons-lang3-3.5-bin.zip

    `EqualsBuilder` 和 `HashCodeBuilder` 则帮助实现自定义的 equals() 和 hashCode() 方法。 7. **异常处理**:`ExceptionUtils` 提供了处理和包装异常的功能,简化异常处理代码。 8. **其他工具类**:`ArrayUtils`...

    Hibernate中对数据库复合主键的支持.pdf

    另外,也可以通过引入Apache Commons Lang库中的`EqualsBuilder`和`HashCodeBuilder`来进一步简化代码: ```java import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder....

    commons-lang3-3.1-src.zip

    `EqualsBuilder`和`HashCodeBuilder`简化了自定义对象的`equals()`和`hashCode()`方法的实现。 9. **类型转换**:`TypeConverter`接口和`TypeConversionUtils`类支持在不同数据类型间的转换,增强了类型安全。 10....

    commons-lang3-3.3.1.rar

    7. **对象工具**:`EqualsBuilder` 和 `HashCodeBuilder` 用于构建自定义的equals()和hashCode()方法,确保对象比较的正确性。 8. **枚举工具**:`EnumUtils` 提供了对Java枚举类型的增强操作,如遍历枚举值、验证...

    commons-lang-2.5.jar

    3. **对象工具**:`ObjectUtils`提供了诸如`firstNonNull()`方法,可以安全地获取多个可能为null的对象中的第一个非null值,而`EqualsBuilder`和`HashCodeBuilder`则帮助我们构建更加健壮的equals()和hashCode()方法...

    commons-lang3-3.7

    8. **对象创建和比较**:`ObjectUtils`和`EqualsBuilder`、`HashCodeBuilder`类提供了对象的创建、比较和深浅拷贝功能,有助于实现自定义的equals()和hashCode()方法。 9. **随机数生成**:`RandomUtils`类提供了...

    commons-lang3-3.10.rar

    10. **Object utilities**:`Objects`类提供了通用的对象操作,例如`EqualsBuilder`和`HashCodeBuilder`用于构建更安全的equals()和hashCode()方法。 11. **Functional programming**:`Function`、`Predicate`和`...

    commons-lang-utils

    10. **比较器**:LangUtils提供了`EqualsBuilder`和`HashCodeBuilder`,用于构建自定义的equals()和hashCode()方法,确保比较的正确性和效率。 Apache Commons Lang Utils通过提供这些实用工具,显著提高了代码的...

Global site tag (gtag.js) - Google Analytics