写@EqualsAndHashCode(callSuper=true)的原因

人菜勿喷,只是记录下。

看到项目代码里中有这么一段

	@Data
	@EqualsAndHashCode(callSuper=true)
	public class Entity{
		//省略
	}

@Data 已经有@Getter,@Setter,@toString,@RequiredArgsConstructor 和@EqualsAndHashCode了,为什么还要再写个@EqualsAndHashCode?

在派生类里用@Data 可能会有问题,@EqualsAndHashCode默认是false,那么在做equals()的时候就不会比较父类的属性,因此可能出现明明不等的两个对象equals之后返回true了。所以为了能够正确的比较,将callSuper改为true,意思是带上父类的属性一起比较。

举例:

A是父类,有id这个属性
B,C都继承A,他们还有name属性
B,C比较的时候,name都相等,id不等
@Data(或者默认的@EqualsAndHashCode) equals之后的结果: true  //因为没有比较父类的id属性
@EqualsAndHashCode=true equals之后的结果: false  //比较父类的id属性,发现不同

项目里肯定有很多子类的,每个都这么写也不太现实哈(其实也不麻烦,挺现实的)
可以加个配置文件lombok.config,在里面写所有子类都要比较父类属性,一次到位哈

<!--lombok.config-->
config.stopBubbling = true <!--声明是根配置文件,从配置文件所在目录开始扫描-->
lombok.equalsAndHashCode.callSuper = call <!--全局配置@EqualsAndHashCode为true-->

写了好几个lombok.config的话,是有个就近原则的哈,(子比父近)子级的配置优先哈

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值