lombok注解 @Data使用在继承类上时出现警告解决

2024-01-06 22:36

本文主要是介绍lombok注解 @Data使用在继承类上时出现警告解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、警告问题

1、@Data注解

@Data 包含了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能。

当使用 @Data注解时,则有了 @EqualsAndHashCode注解(即@EqualsAndHashCode(callSuper=false)),那么就会在此类中存在equals(Object other) 和 hashCode()⽅法,且不会使用父类的属性,这就导致了可能出现的问题。

**@RequiredArgsConstructor注解表示:**为需要的字段生成构造方法(可能带参数也可能不带参数)。需要的字段包括:以final修饰的未经初始化的字段、以@NonNull注解的未经初始化的字段。

2、@EqualsAndHashCode注解

生成 hashCode()和equals()方法,默认情况下,它将使用所有非静态,非transient字段。但可以通过在可选的exclude参数中来排除更多字段。或者,通过在of参数中命名它们来准确指定希望使用哪些字段。

  • 可以通过参数exclude排除一些参数;
  • 可以通过参数of指定仅使用哪些属性;
  • 它默认仅使用该类定义的属性且不调用父类的方法;
  • 可以通过 callSuper=true解决第三点问题,让其生成的方法调用父类的方法。
// exclude 排除字段
@EqualsAndHashCode(exclude = {“password”, “salt”})// of 指定要包含的字段
@EqualsAndHashCode(of = {“id”, “phone”, “password”})// 会比较父类中的属性值
@EqualsAndHashCode(callSuper=true)

3、出现警告问题

如果 @Data注解使用在没有继承关系的类上是,IDEA不会出现警告问题。

如果 @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。意思是,该注解在实现 ToString EqualsAndHashCode 方法时,不会考虑父类的属性,通过反编译的源码也是可以看到他是没有对父类的字段进行比较的。

二、警告问题解决

1、解决方式一

直接在子类上声明 @EqualsAndHashCode(callSuper = true)注解即可。

如果项目中子类使用比较多时,维护起来比较麻烦。

2、解决方式二(推荐)

在项目的 src/main/java根目录下创建 lombok配置文件 lombok.config。全局配置来解决警告问题。

lombok.config配置文件是通过一些设置来控制代码生成的规则或者称之为习惯,配置文件的位置应放在src/mian/java,不要放置在src/main/resources。

注意:

  • 该方式有版本要求,最低为 lombok 1.14。
  • 配置文件和要使用注解的类要在同一套代码中,要么同时在 src/main/java 要么同时在 src/test/java中。

在这里插入图片描述
lombok.config配置内容如下:

# 该配置声明这个配置文件是一个根配置文件,他会从该配置文件所在的目录开始扫描
config.stopBubbling=true# 全局配置 equalsAndHashCode 的 callSuper 属性为true,这样就不用每个类都要去写了
lombok.equalsAndHashCode.callSuper=call

lombok 配置的支持分层:
lombok 配置文件支持分层,在根目录配置的的配置文件对全局生效,如果某个子包中也有配置文件,则子包的类优先以子包中的配置为准。

参考文章:

  • Lombok–使用详解:https://knife.blog.csdn.net/article/details/106725810

– 求知若饥,虚心若愚。

这篇关于lombok注解 @Data使用在继承类上时出现警告解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/577846

相关文章

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

redis-cli命令行工具的使用小结

《redis-cli命令行工具的使用小结》redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的... 目录基本连接参数基本连接方式连接远程服务器带密码连接操作与格式参数-r参数重复执行命令-i参数指定命

PyTorch使用教程之Tensor包详解

《PyTorch使用教程之Tensor包详解》这篇文章介绍了PyTorch中的张量(Tensor)数据结构,包括张量的数据类型、初始化、常用操作、属性等,张量是PyTorch框架中的核心数据结构,支持... 目录1、张量Tensor2、数据类型3、初始化(构造张量)4、常用操作5、常用属性5.1 存储(st

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp