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

news2024/9/27 23:24:17

一、警告问题

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

– 求知若饥,虚心若愚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1364017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于java,springboot的学生考勤系统

1.环境以及简介 基于java,springboot的学生考勤系统,Java项目,SpringBoot项目,vue项目,含开发文档,源码,数据库以及ppt。 源码下载 另有1000份项目源码,项目有java(包含springboo…

【Java】设计模式之两阶段终止

两阶段终止 两阶段终止,即Two Phase Termination。是用来终止线程的套路。 它的思想是,如何在一个线程T1中优雅地终止线程T2?这里的【优雅】指的是给T2一个料理后事的机会。 错误思路: 使用stop方法。stop 方法会真正杀死线程…

CentOS 7 实战指南:文件或目录的权限操作命令详解

前言 这篇文章详细介绍了文件和目录的常用权限操作命令,并提供了全面的技术解析。通过本文,你将学习如何使用 chmod 和 chown 命令来管理文件和目录的权限,控制用户和用户组的访问权限。无论你是初学者还是有经验的系统管理员,这…

synchronized、volatile关键字

Java中的synchronized关键字 synchronized关键字介绍 synchronized块是Java提供的一种原子性内置锁,Java中的每个对象都可以把它当作一个同步锁来使用,这些Java内置的使用者看不到的锁被称为内部锁,也叫作监视器锁。 线程的执行代码在进入…

ssm基于JSP的明水县苹果网吧计费管理系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本明水县苹果网吧计费管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大…

Guava:Cache强大的本地缓存框架

Guava Cache是一款非常优秀的本地缓存框架。 一、 经典配置 Guava Cache 的数据结构跟 JDK1.7 的 ConcurrentHashMap 类似,提供了基于时间、容量、引用三种回收策略,以及自动加载、访问统计等功能。 基本的配置 Testpublic void testLoadingCache() th…

【精通C语言】:深入解析C语言中的while循环

🎥 屿小夏 : 个人主页 🔥个人专栏 : C语言详解 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、while循环1.1语法1.2 执行过程解析1.3 break1.4 continue 🌤️全篇总结 &…

基于Java SSM框架实现旅游资源网站系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现旅游资源网站系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述旅…

Windows server——部署DHCP服务(2)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.配置DHCP服务 1.DHCP安装的要求 安装DHCP服务器需要满足如下要求&#…

springboot第47集:【思维导图】面向对象,关键字,标识符,变量,数组的使用...

关键字:class,public,static,void等,特点是全部关键字都是小写字母。 image.png image.png 凡是自己起的名字可以叫标识符 image.png image.png image.png image.png 整数类型的使用 image.png image.png image.png 浮点类型 image.png image.png 字符类…

iPhone 恢复出厂设置后如何恢复数据

如果您在 iPhone 上执行了恢复出厂设置,您会发现所有旧数据都被清除了。这对于清理混乱和提高设备性能非常有用,但如果您忘记保存重要文件,那就是坏消息了。 恢复出厂设置后可以恢复数据吗?是的!幸运的是,…

八大算法排序@冒泡排序(C语言版本)

冒泡排序 概念 冒泡排序(Bubble Sort)是一种简单直观的排序算法,它重复地遍历待排序序列,一次比较两个相邻的元素,如果它们的顺序错误就将它们交换过来。通过多次的遍历,使得最大的元素逐渐移动到待排序序…

使用monai.visualize.utils.matshow3d函数展示3D医学图像

monai.visualize.utils.matshow3d 函数是 MONAI 包中用于可视化 3D 图像数据的一个实用工具函数。它可以在平面中显示一个或多个3D图像,并提供一些参数来控制显示的方式和外观。 先导入需要的包 import numpy as np import matplotlib.pyplot as plt from monai.v…

C#,入门教程(10)——常量、变量与命名规则的基础知识

上一篇: C#,入门教程(09)——运算符的基础知识https://blog.csdn.net/beijinghorn/article/details/123908269 C#用于保存计算数据的元素,称为“变量”。 其中一般不改变初值的变量,称为常变量,简称“常量”。 无论…

阿里云服务器地域怎么选择?2024地域选择方法

阿里云服务器地域和可用区怎么选择?地域是指云服务器所在物理数据中心的位置,地域选择就近选择,访客距离地域所在城市越近网络延迟越低,速度就越快;可用区是指同一个地域下,网络和电力相互独立的区域&#…

FineBI实战项目一(3):Kettle实现ETL到数据仓库

目前,finebi_shop_bi 中是没有任何数据的,是一个空的数据库。而后续我们的所有数据分析都将在该数据库中进行。我们第一件事情就是要将 「finebi_shop」数据库中的所有表抽取到「finebi_shop_bi」数据库中。要抽取并装载数据到「finebi_shop_bi」中&…

Redisson 源码解析 - 分布式锁实现过程

一、Redisson 分布式锁源码解析 Redisson是架设在Redis基础上的一个Java驻内存数据网格。在基于NIO的Netty框架上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常…

查看网络信息的原初 ifconfig

文章目录 查看网络信息的原初 ifconfig默认无参数使用-s显示短列表配置IP地址修改MTU启动关闭网卡更多信息 查看网络信息的原初 ifconfig Linux ifconfig命令用于显示或设置网络设备,在调试或调优的时间经常使用。 官方定义为: ifconfig - configure a…

19道ElasticSearch面试题(很全)

1. elasticsearch的一些调优手段 1、设计阶段调优 (1)根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索引; (2)使用别名进行索引管理; (3&…

linux中最常用的网络命令

文章目录 linux中最常用的网络命令查看网络信息的原初 ifconfig默认无参数使用-s显示短列表配置IP地址修改MTU启动关闭网卡 网络中不中,先看ping行不行语法不加任何参数发送指定数目设定发送时间间隔组合使用 Linux ip命令显示网络设备设置IP地址启动关闭网卡统计方…