Lombok中@EqualsAndHashCode注解的使用及说明
作者:Rookie_cc 发布时间:2023-11-30 04:47:05
标签:Lombok,@EqualsAndHashCode,注解
@EqualsAndHashCode注解
@EqualsAndHashCode注解的作用就是自动实现model类的equals方法和hashcode方法。
我们在实际工作中经常会使用lombok来简化我们的开发
例如我们可以在定义的model类上添加@Data注解,从而免去手写get、set、toString、equals、hashcode等方法。
先来看问题
1、定义一个基础类Car
/**
* 汽车
*/
@Data
public class Car {
/**
* 颜色
*/
private String color;
/**
* 续航
*/
private Integer endurance;
}
2、定义一个扩展类BYD继承Car
/**
* 比亚迪汽车
*/
@Data
public class BYD extends Car {
/**
* 价格
*/
private Integer price;
}
3、分别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));
}
}
4、查看比较结果
我们会发现明明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;
}
---------------------------------或------------------------------
/**
* 比亚迪汽车
*/
@Getter
@Setter
public class BYD extends Car {
/**
* 价格
*/
private Integer price;
}
来源:https://blog.csdn.net/Rookie_cc/article/details/118415024


猜你喜欢
- Java操作Redis的方式有下面两种:一、jedis(1)maven配置<dependency> <grou
- jmap:Java内存映像工具jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文
- 在国际化环境下,越来越多的程序需要做多语言版本,以适应各种业务需求的变化。在Winform应用程序中实现多语言也有常规的处理方式处理,不过需
- Android开发中,难免会遇到需要加解密一些数据内容存到本地文件、或者通过网络传输到其他服务器和设备的问题,但并不是使用了加密就绝对安全了
- 以下内容通过1、实现目标注入程序,2、实现主程序,3、实现注入函数,4、thumb指令集实现等4个方面详细分析了android中inline
- 本文实例讲述了Android开发实现Files文件读取解析功能。分享给大家供大家参考,具体如下:package com.example.fi
- 废话不多说了,给大家贴关键代码了,具体代码如下所示:import java.io.File;import java.io.FileOutpu
- 最近在做一个需求:从其他系统的ftp目录下载存储图片url的文件,然后读取文件中的url地址,根据地址下载图片后按天压缩成一个包,平均一个地
- 适合人群学完Java基础想通过Java快速构建web应用程序想学习或了解SpringBoot背景本节给大家讲讲 Java的Spri
- 基本流foreach 实现了外部迭代,它是建立于集合的基础上;stream 流实现的是内部迭代中间操作与终端操作对任意集合使用 stream
- 背景公司的一个服务需要做类似于分片的逻辑,一开始服务基于传统部署方式通过本地配置文件配置的方式就可以指定该机器服务的分片内容如:0,1,2,
- 本文实例讲述了C#实现农历日历的方法。分享给大家供大家参考。具体实现方法如下://天干 private static
- 首先,想要明白hashCode的作用,你必须要先知道Java中的集合。 总的来说,Java中的集合(Collection)有两类,一类是Li
- 本文实例为大家分享了java用户注册功能,供大家参考,具体内容如下主页面: 浏览器显示:代码实现:<%@ page language=
- 一、BigInteger介绍如果在操作的时候一个整型数据已经超过了整数的最大类型长度 long 的话,则此数据就无法装入,所以,此时要使用
- 问题描述:由于在使用SQL查询大量的数据并一次显示到dataGridView控件,出现拖拉的时候卡顿。解决方法:1.首先分页。2.其次把显示
- 由于项目这种类型的图片按钮比较多,所以重写了ImageButton类。package me.henji.widget;import andr
- 简述在学着使用Java的命令行来编译java文件的时候,遇到了这个问题Windows操作系统报错“‘
- 本文实例为大家分享了viewGroup实现点击动画效果展示的具体代码,供大家参考,具体内容如下public class MyCustomVi
- 本文实例讲述了Java实现多个wav文件合成一个的方法。分享给大家供大家参考,具体如下:前面一篇介绍了java切割wav音频文件的方法,这里