子类继承时的@Data使用

一直用的都是@Data,省去了写set、get、equal之类方法。但是有一次发现子类继承父类的时候使用@Data会有报警信息。
在这里插入图片描述
翻译一下就是子类的equals和hashCode方法,不会有父类的属性。我们可以查看项目target/classes目录下的该类的hashCode方法,默认情况下属性都是使用的他自身的属性。
具体的子类如下图:
子类继承时的@Data使用_第1张图片
编译后class文件里的方法如下图:
子类继承时的@Data使用_第2张图片
子类继承时的@Data使用_第3张图片
可以看到只用了子类自己的属性,可以跟据提示加上注解@EqualsAndHashCode(callSuper = true),即可解决。
子类继承时的@Data使用_第4张图片
还在网上看到另外一种更简便的写法,
在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”

你可能感兴趣的:(日常工作问题,java,lombok)