一、问题描述
在实体类上使用了Lombok的@Data注解后,idea爆黄色警告,虽然不影响使用,但还是解决一下,警告如下:
Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add ‘(callSuper=false)’ to your type.
二、场景还原
1. 实体类
@Data
public class ConnectTest extends Model<ConnectTest> {
private Integer id;
}
三、原因分析
该警告的直接意思是,生成了
equals/hashCode
的实现,但是没有调用父类,虽然该类没有继承java.lang.Object
,人话就是说equals/hashCode
需要比较父类,不然你直接继承java.lang.Object
好了,如果你是专门的,需要添加(callSuper=false)
明示一下。
原因是@Data
注解中包含了@EqualsAndHashCode
注解,而 @EqualsAndHashCode 默认就是 callSuper=false
,这样在通过equals/hashCode
比较两个对象时不会调用父类的equals/hashCode
方法,也就不会比较父类传承过来的字段,那有可能就会出错,一般来说,还是比较的好。当然,比如你的父类是基类,只包含创建时间之类的东西,根据业务不用比较。
四、解决方案
1. @EqualsAndHashCode(callSuper = true)
点击下面的提示,idea会自动添加@EqualsAndHashCode(callSuper = true)
注解,或者自己添加上。
就不再报警告了
2. lombok.config
那如果有很多类,一一添加很麻烦,还不好看,有什么省事的办法吗?有的,兄弟,lombok插件提供了自己的配置文件lombok.config
,里面可以一次性配置全体。
lombok.equalsAndHashCode.callSuper=call
可以看到@Data的注解警告也没有了
lombok.config文件可以放在项目根目录下,也可以放在模块下,只对该模块生效,src/main/java
或者src/main/java/entity
都可以,至少在实体类的上级或者同级目录。
喜欢的点个关注吧><!祝你永无bug!
/*
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永无BUG
*/