Lombok中@EqualsAndHashCode注解的使用及说明
作者:Rookie_cc 时间:2023-11-30 04:47:05
@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
标签:Lombok,@EqualsAndHashCode,注解
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
c#委托详解和和示例分享
2022-10-26 12:29:41
![](https://img.aspxhome.com/file/2023/8/83238_0s.jpg)
Android极光推送处理message遇到的坑解决
2022-08-08 00:49:32
![](https://img.aspxhome.com/file/2023/8/105978_0s.jpg)
Java中遍历ConcurrentHashMap的四种方式详解
2023-11-17 08:54:41
Android开发使用strings.xml多语言翻译解决方案
2023-06-27 14:19:24
![](https://img.aspxhome.com/file/2023/7/138117_0s.jpg)
Android中使用Matrix控制图形变换和制作倒影效果的方法
2022-11-23 07:35:23
![](https://img.aspxhome.com/file/2023/8/137558_0s.png)
spring cglib 与 jdk 动态代理
2021-07-19 20:28:43
C#下解析HTML的两种方法介绍
2021-07-03 16:08:21
![](https://img.aspxhome.com/file/2023/7/113887_0s.jpg)
Java在web页面上的编码解码处理及中文URL乱码解决
2023-08-25 11:10:19
![](https://img.aspxhome.com/file/2023/6/58206_0s.gif)
Flutter runApp到渲染上屏分析详解
2023-06-27 12:09:45
![](https://img.aspxhome.com/file/2023/6/106056_0s.jpg)
Java流处理stream使用详解
2021-09-17 18:27:58
Android仿一点资讯收藏Toast动画效果
2022-01-15 18:42:33
![](https://img.aspxhome.com/file/2023/2/106832_0s.png)
Kotlin协程到底是如何切换线程的
2022-03-03 13:52:39
![](https://img.aspxhome.com/file/2023/8/111728_0s.png)
Android实现Z轴布局效果
2021-11-19 05:33:56
![](https://img.aspxhome.com/file/2023/6/126746_0s.jpg)
JAVA字符串占位符使用方法实例
2021-09-20 17:30:27
Android 获取手机信息实例详解
2021-08-21 00:22:34
![](https://img.aspxhome.com/file/2023/8/137128_0s.png)
Java语言实现最大堆代码示例
2021-09-22 14:20:44
简介Java的Hibernate框架中的Session和持久化类
2023-04-17 14:41:13
Android为View添加拖放效果的方法实例
2023-06-25 18:53:45
Java中Stream流中map和forEach的区别详解
2022-07-09 12:24:43
![](https://img.aspxhome.com/file/2023/8/108428_0s.jpg)
MyBatis常用的jdbcType数据类型
2023-09-18 19:09:35