一直用的都是@Data,省去了写set、get、equal之类方法。但是有一次发现子类继承父类的时候使用@Data会有报警信息。
翻译一下就是子类的equals和hashCode方法,不会有父类的属性。我们可以查看项目target/classes目录下的该类的hashCode方法,默认情况下属性都是使用的他自身的属性。
具体的子类如下图:
编译后class文件里的方法如下图:
可以看到只用了子类自己的属性,可以跟据提示加上注解@EqualsAndHashCode(callSuper = true)
,即可解决。
还在网上看到另外一种更简便的写法,
在stackoverflow上,就有人提出了这个问题:https://stackoverflow.com/questions/38572566/warning-equals-hashcode-on-data-annotation-lombok-with-inheritance,另外,lombok作者Roel也给出了解决办法,就是通过自定义lombok.config文件来解决。
按照Roel的说法,lombok.config文件需要放在src/main/java文件夹下的目录中(也可以放在实体同级目录下),放在src/main/resources目录下,不会生效。下面,我们通过这种方式来解决这个警告的问题。
1、新建lombok.config文件,然后配置:
config.stopBubbling=true
lombok.equalsAndHashCode.callSuper=call
2.pom.xml文件中需要加入如下插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
参考文献“参考1”