热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

什么是HashCodeBuilder和EqualsBuilder,用于覆盖hashcode()和equals()方法?

如何解决《什么是HashCodeBuilder和EqualsBuilder,用于覆盖hashcode()和equals()方法?》经验,为你挑选了1个好方法。

我必须覆盖实体类的equals()方法和hascode()方法.但我的问题是为什么要使用HashcodeBuilder和EqualsBuilder来实现它.

这两者中哪一个更好,为什么?

  @Override
public int hashCode()
{
    return HashCodeBuilder.reflectionHashCode(this, false);
}

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

要么

@Override
public int hashCode()
{
    final int prime = 31;
    int result = 1;
    result = prime * result + ((userKey == null) ? 0 : userKey.hashCode());
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    result = prime * result + ((userEntity == null) ? 0 : userEntity.hashCode());
    return result;
}

@Override
public boolean equals(Object obj)
{
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    UserKeyEntity other = (UserKeyEntity) obj;
    if (UserKey == null)
    {
        if (other.userKey != null)
            return false;
    }
    else if (!userKey.equals(other.userKey))
        return false;
    if (id == null)
    {
        if (other.id != null)
            return false;
    }
    else if (!id.equals(other.id))
        return false;
    if (userEntity == null)
    {
        if (other.userEntity != null)
            return false;
    }
    else if (!userEntity.equals(other.userEntity))
        return false;
    return true;
}

为什么?

默认情况下,第二个是由STS IDE创建的.请告诉我第一个选项到底是什么以及为什么要选择?



1> user2336315..:

就个人而言,我不会使用反射来计算equals和hashcode.

正如文件所述(for EqualsBuilder.reflectionEquals):

它使用AccessibleObject.setAccessible来访问私有字段.这意味着如果未正确设置权限,则在安全管理器下运行时将抛出安全性异常.它也没有明确测试那么高效.使用equals()比较非原始字段.

所以

你正在做危险的操作(你甚至不确定你不会得到一个SecurityException)

它的效果较差,因为您使用反射来计算这些值

从个人的角度来看,我真的觉得使用反射来计算你的类中的equals和hashcode是没有意义的.这就像使用错误的工具.

由于您已经在使用第三方库,我会使用HashCodeBuilder如下:

@Override
public int hashCode() {
    return new HashCodeBuilder().append(userKey)
                                .append(id)
                                .append(userEntity)
                                .toHashCode();
}

与equals相同:

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    UserKeyEntity other = (UserKeyEntity) obj;
    return new EqualsBuilder().append(userKey, other.userKey)
                              .append(id, other.id)
                              .append(userEntity, other.userEntity)
                              .isEquals();
}

这比Eclipse生成的更具可读性,并且不使用反射.


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 如何解决《JavaHashSet包含无法正常工作的函数》经验,为你挑选了1个好方法。 ... [详细]
  • 【J2SE】hotspot中如何实现Object.hashCode
    本文目录 一、基本概念二、hotspot的实现Object.hashCode()markwordget_next_hash(thread,obj)System.identityHa ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
  • java散列与散列码探讨,简单HashMap实现散列映射表执行各种操作示列packageorg.rui.collection2.maps;***散列与散列码*将土拔鼠对象与预报对象联系 ... [详细]
  • Java集合类中常见的hashSet,hashMap,hashTable(现已很少用,几乎都采用hashMap替代)的实现都离不开散列表,而散列表的优势在于O(1)级别的查找,而has ... [详细]
  • 本文来自:高爽|Coder,原文地址:http:blog.csdn.netghsauarticledetails16843543,转载请注明。HashMap可以 ... [详细]
  • 如何解决《为什么这个hashCode()方法被认为很差?》经验,为你挑选了1个好方法。 ... [详细]
  • 根据当前的理解,哈希码的作用随Hashmap,HashSet等集合一起提供,并且仅出于实际 ... [详细]
author-avatar
huangbaihao54
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有