Lombok 中 @EqualsAndHashCode注解的使用

news2024/11/20 20:42:31

Lombok 中 @EqualsAndHashCode注解的使用

@EqualsAndHashCode注解的作用

  • @EqualsAndHashCode注解的作用就是自动实现model类的equals方法和hashcode方法。
  • 我们在实际工作中经常会使用lombok来简化我们的开发,例如我们可以在定义的model类上添加@Data注解,从而免去手写get、set、toString、equals、hashcode等方法。

定义一个基础类Car

  • /**
     * 汽车
     */
    @Data
    public class Car {
     
        /**
         * 颜色
         */
        private String color;
     
        /**
         * 续航
         */
        private Integer endurance;
     
    }
    

定义一个扩展类BYD继承Car

  • /**
     * 比亚迪汽车
     */
    @Data
    public class BYD extends Car {
     
        /**
         * 价格
         */
        private Integer price;
     
    }
    

分别new两个对象并比较

  • public class EqualsAndHashCodeTest {
     
        public static void main(String[] args) {
            BYD bydBlue = new BYD();
            bydBlue.setPrice(150000);
            bydBlue.setColor("蓝色");
            bydBlue.setEndurance(1200);
     
            BYD bydWhite = new BYD();
            bydWhite.setPrice(150000);
            bydWhite.setColor("白色");
            bydWhite.setEndurance(1200);
     
            System.out.println("两个对象比较结果:" + bydBlue.equals(bydWhite));
        }
     
    

查看比较结果

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-onNPrlpJ-1690847978862)(C:\Users\quyanliang\AppData\Roaming\Typora\typora-user-images\1690847856056.png)]

  • 我们会发现明明new的是两个不同的对象,但是使用equals比较出来的结果却是true。

  • 原因是它没有调用父类的中属性,而是直接使用的子类中的属性来生成hashcode,所以当子类中的属性参数一样时,使用equals比较结果的为true。

解决办法:

  • **添加@EqualsAndHashCode(callSuper = true)注解*或者*不使用@Data注解。

  • EqualsAndHashCode(callSuper = true),就是用自己的属性和从父类继承的属性来生成hashcode;

  • @EqualsAndHashCode(callSuper = false),就是只用自己的属性来生成hashcode;

  • @Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集, 和@EqualsAndHashCode默认是false。

  • /**
     * 比亚迪汽车
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    public class BYD extends Car {
     
        /**
         * 价格
         */
        private Integer price;
     
    }
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eS6ehmnY-1690847978863)(C:\Users\quyanliang\AppData\Roaming\Typora\typora-user-images\1690847956255.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/851371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go 异步任务

Go 异步任务 异步任务在开发中很常见,用来做解耦。本文介绍一下异步队列的实现的几个问题,并且结合三方库实现来分析。 有下面的几个关键点: 用户代码(任务)如何封装数据的存放(数据存放在哪里?就是一个…

Java——基础语法(二)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

【SpringBoot】| ORM 操作 MySQL(集成MyBatis)

目录 一:ORM 操作 MySQL 1. 创建 Spring Boot 项目 2. MapperScan 3. mapper文件和java代码分开管理 4. 事务支持 一:ORM 操作 MySQL 使用MyBatis框架操作数据, 在SpringBoot框架集成MyBatis,使用步骤: &#x…

恒压恒流模式的工作原理及直流电源的应用

直流电源的两种基本工作模式为恒压、恒流,恒压输出时,电压恒定,随着负载发生变动,电流随之改变,当电流到达设定的阈值时,切换到恒流模式,维持目标电流为恒定值。 下面给出直流电源的伏安特性曲…

【数据结构与算法】十大经典排序算法-快速排序

🌟个人博客:www.hellocode.top 🏰Java知识导航:Java-Navigate 🔥CSDN:HelloCode. 🌞知乎:HelloCode 🌴掘金:HelloCode ⚡如有问题,欢迎指正&#…

Spring中的循环依赖问题

文章目录 前言一、什么是循环依赖?二、三级缓存三、图解三级缓存总结 前言 本文章将讲解Spring循环依赖的问题 一、什么是循环依赖? 一个或多个对象之间存在直接或间接的依赖关系,这种依赖关系构成一个环形调用,有下面 3 种方式…

根据数组中各值是否满足指定条件决定是否将其按指定规则计算更新numpy.putmask()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 根据数组中各值是否满足指定条件 决定是否将其按指定规则计算更新 numpy.putmask() 选择题 以下程序的运行结果是? import numpy as np xnp.array([1,2,3,4,5]) print("【显示】x:\n&quo…

【Spring】如果你需要使用重试机制,请使用Spring官方的Spring Retry

文章目录 前言Spring Retry的基本使用第一步,引入Spring Retry的jar包第二步,构建一个RetryTemplate类第三步,使用RETRY_TEMPLATE注意事项 拓展方法降级操作重试策略:时间策略重试策略:指定异常策略 前言 Spring Retr…

Vue3 第五节 一些组合式API和其他改变

1.provide和inject 2.响应式数据判断 3.Composition API的优势 4.新的组件 5.其他改变 一.provide和inject 作用:实现祖与后代组件间通信 套路:父组件有一个provide选项来提供数据,后代组件有一个inject选项来开始使用这些数据 &…

centos 7镜像(iso)下载图文教程(超详细)

声明:本教程为本人学习笔记,仅供参考 文章目录 前言一、阿里云镜像站下载centos 7 二、清华源下载centos 7小结 前言 声明:本教程为本人学习笔记,仅供参考 本教程将提供两种方式下载centos 7 系统镜像 1、阿里巴巴开源镜像站 2、…

Unity之ShaderGraph 节点介绍 Procedural节点

程序化 噪声Gradient Noise(渐变或柏林噪声)Simple Noise(简单噪声)Voronoi(Voronoi 噪声) 形状Ellipse(椭圆形)Polygon(正多边形)Rectangle(矩形…

VM虚拟机和主机互相ping不通,但是ssh能连上,也能访问外网

直接还原默认设置,然后点确定 注意,你还原设置以后ip也会变,ifconfig自己重新看一下

大数据-玩转数据-Sink到Kafka

一、添加Kafka Connector依赖 pom.xml 中添加 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-kafka_${scala.binary.version}</artifactId><version>${kafka.version}</version></dependency&g…

IMV4.0

背景内容&#xff1a; 经历了多个版本&#xff0c;基础内容在前面&#xff0c;可以使用之前的基础环境&#xff1a; v1&#xff1a; https://blog.csdn.net/wtt234/article/details/132139454 v2&#xff1a; https://blog.csdn.net/wtt234/article/details/132144907 v3&#…

Docker mysql+nacos单机部署

docker 网络创建 由于nacos需要访问mysql的数据&#xff0c;因此mysql容器和nacos容器之间需要进行通信。容器间通信有很多方式&#xff0c;在这里采用同一网络下的方式进行实现。因此需要创建网络。创建网络的命令如下&#xff1a; docker network create --driver bridge n…

致远OA任意管理员登录

真的&#xff0c;如果痛苦不能改变生存&#xff0c;那还不如平静地将自己毁灭。毁灭。一切都毁灭了&#xff0c;只有生命还在苟延残喘。这样的生命还有什么存在的价值&#xff1f; 漏洞复现 访问漏洞url 构造payload POST /seeyon/thirdpartyController.do HTTP/1.1methoda…

【数据结构与算法】平衡二叉树(AVL树)

平衡二叉树&#xff08;AVL树&#xff09; 给你一个数列{1,2,3,4,5,6}&#xff0c;要求创建二叉排序树&#xff08;BST&#xff09;&#xff0c;并分析问题所在。 BST 存在的问题分析&#xff1a; 左子树全部为空&#xff0c;从形式上看&#xff0c;更像一个单链表。插入速度…

pg实现月累计

获取每月累计数据&#xff1a; ​​​ SELECT a.month, SUM(b.total) AS total FROM ( SELECT month, SUM(sum) AS total FROM ( SELECT to_char(date("Joinin"),YYYY-MM) AS month , COUNT(*) AS sum FROM "APP_HR_Staff_Basic_Info" GROUP BY month ) …

Vue中使用uuid生成唯一ID(脚手架创建自带的)

1.utils 说明&#xff1a;一般封装工具函数。 // 单例模式 import { v4 as uuidv4 } from uuid; // 要生成一个随机的字符串&#xff0c;且每次执行不能发生变化 // 游客身份还要持久存储 function getUUID(){// 先从本地获取uuid&#xff0c;本地存储里面是否有let uuid_tok…

淘宝整店商品如何批量获取?获取淘宝店铺所有商品接口item_search_shop

在竞争日益激烈的电商行业&#xff0c;不少商家出于以下的考虑&#xff0c;想要实现一键批量获取淘宝店铺的所有商品。 竞争分析&#xff1a;通过获取某个店铺内的所有商品信息&#xff0c;可以对竞争对手的产品进行全面的了解和分析。可以了解到对手的产品种类、价格、销量等情…