Lombok注解详解

文章目录

  • 注解详解
    • lombok包下
      • 注解汇总
      • - Getter
      • - Setter
      • - ToString
      • - EqualsAndHashCode
      • - Data
      • - Value
      • - NonNull
      • - NoArgsConstructor
      • - AllArgsConstructor
      • - RequiredArgsConstructor
      • - Builder
      • - Synchronized
      • - Cleanup
      • - Singular
      • - Generated
      • - SneakyThrows
      • - val
      • - var
    • experimental包下
      • 注解汇总
      • - Accessors
      • - Delegate
      • - SuperBuilder
      • - PackagePrivate
      • - Helper
      • - ExtensionMethod
      • - UtilityClass
      • - Wither
      • - Tolerate
      • - FieldDefaults
      • - NonFinal
      • - FieldNameConstants
    • extern包下
      • 注解汇总
      • - CommonsLog
      • - Flogger
      • - Log
      • - JBossLog
      • - Log4j
      • - Log4j2
      • - Slf4j


注解详解

Lombok提供了很多注解用于生成Java代码,主要存放于lombok、experimental、extern包下。

lombok包下

注解汇总

注解名称作用
Getter注解在类上或属性上,为类的所有属性或单个属性自动生成getter方法
Setter注解在类上或属性上,为类的所有属性或单个属性自动生成setter方法
ToString注解在类上,自动生成类的toString方法
EqualsAndHashCode注解在类上,自动生成类的equals和hashCode方法
Data注解在类上,自动生成getter、setter、toString、equals和hashCode方法
Value注解在类上,创建不可变类,属性定义为不可变,自动生成getter、toString、equals和hashCode方法
NonNull注解在方法、属性、参数等上,标记字段为非空,如果为空则抛出异常
NoArgsConstructor生成无参构造函数
AllArgsConstructor生成包含所有参数的构造函数
RequiredArgsConstructor注解在类上,生成包含所有必需参数的构造函数(如:final修饰的参数、@NonNull注解的属性)
Builder注解在类上,被注解的类加上构造者模式(链式赋值),可使用建造者模式创建对象
Synchronized注解在方法上,为方法添加同步锁
Cleanup注解在实例化的“流”对象前,使用完后自动关闭流
Singular注解在属性上,为集合字段生成单个元素方法,需要配合 @Builder 使用
Generated标记生成的代码
SneakyThrows自动捕获可能抛出的已检查异常,并重新抛出,不会再发生已检查异常未捕获或抛出时,代码报红的情况。
val声明不可变变量,使用推断类型
var声明变量,使用推断类型

- Getter

在这里插入图片描述

在这里插入图片描述

- Setter

在这里插入图片描述

在这里插入图片描述

- ToString

在这里插入图片描述

- EqualsAndHashCode

在这里插入图片描述

- Data

在这里插入图片描述

- Value

@Value 注解和 @Data 类似,区别在于它会把类和所有成员变量默认定义为 private final 修饰,自动生成getter、toString、equals和hashCode方法,但并不生成setter方法。
在这里插入图片描述

- NonNull

在这里插入图片描述

- NoArgsConstructor

在这里插入图片描述

- AllArgsConstructor

在这里插入图片描述

- RequiredArgsConstructor

在这里插入图片描述

- Builder

在这里插入图片描述

- Synchronized

在这里插入图片描述

- Cleanup

在这里插入图片描述

- Singular

在这里插入图片描述

- Generated

- SneakyThrows

已检查异常未捕获或抛出时,代码报红:
在这里插入图片描述

使用SneakyThrows:
在这里插入图片描述

- val

在这里插入图片描述

在这里插入图片描述

- var

在这里插入图片描述

experimental包下

注解汇总

注解名称作用
Accessors配置生成的 getter 和 setter 方法的命名策略。通过设置不同的参数,可以控制生成的方法是否使用链式调用(chain)、是否使用流式调用(fluent)等
Delegate可以对任何字段或无参数方法进行注释,生成委托方法,允许将一个对象的方法委托给另一个对象。通常用于将某个对象的复杂操作委托给其他类,以保持类的简洁性和可维护性。
SuperBuilder在生成的 Builder 模式中包含父类属性。通常用于子类继承父类,并希望在子类中生成 Builder 模式时包含父类的属性。
PackagePrivate自动生成包私有访问级别的方法或字段。这样的方法或字段只能被同一包中的其他类访问,不对外暴露,提高了类的封装性。
Helper将一个类标记为辅助类,用于帮助生成其他类。通常用于为特定功能提供支持的类,但不是该功能的主要实现类。
ExtensionMethod向现有类添加额外的方法。允许在不修改原始类的情况下,为该类添加新的方法,以实现功能扩展。
UtilityClass将一个类标记为实用工具类,自动添加私有构造函数和静态方法。通常用于包含一组静态方法,这些方法与类的实例状态无关,只是一组通用的功能方法。
Wither生成带有某个字段修改器的方法,用于生成新的对象。通常用于不可变对象中,用于创建新的对象并修改其中一个字段的值,而不改变原始对象。
Tolerate允许 Lombok 忽略特定的警告。在某些情况下,Lombok 自动生成的代码可能会引发 IDE 或编译器的警告,可以使用该注解来抑制这些警告。
FieldDefaults为字段添加默认修饰符,如 private、protected 等。通过设置不同的参数,可以为字段设置默认的修饰符和默认值,提高了代码的可读性和可维护性。
NonFinal标记一个字段,使其不会生成 final 修饰符。通常用于标记类中的字段,以防止 Lombok 自动生成的代码为字段添加 final 修饰符,从而允许字段的值在对象创建后进行修改。
FieldNameConstants自动生成字段名的常量。通过该注解,可以在一个接口中定义所有字段的名称常量,避免在代码中直接使用字符串,提高了代码的可维护性和可读性。

- Accessors

- Delegate

- SuperBuilder

- PackagePrivate

- Helper

- ExtensionMethod

- UtilityClass

- Wither

- Tolerate

- FieldDefaults

- NonFinal

- FieldNameConstants

extern包下

extern包中,主要是针对日志,会自动生成日志对象,然后可以直接使用log对象打印日志。

注解汇总

注解名称作用
CommonsLogprivate static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class)
Floggerprivate static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass()
Logprivate static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName())
JBossLogprivate static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class)
Log4jprivate static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class)
Log4j2private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class)
Slf4jprivate static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class)
XSlf4jprivate static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class)

- CommonsLog

- Flogger

- Log

- JBossLog

- Log4j

- Log4j2

- Slf4j

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pwn(安装环境)

从安装虚拟机开始 1.先安装vmware 详细教程: VMware下载安装教程(超详细)-CSDN博客 2.然后下载虚拟机镜像文件 进入下面这个链接下载 Get Kali | Kali LinuxHome of Kali Linux, an Advanced Penetration Testing Linux distribution used for Penetration Te…

Linux安装配置CGAL,OpenCV和Gurobi记录

安装Qt,查看当前的Qt版本,需要至少满足v5.12 qmake -v安装CGAL,The Computational Geometry Algorithms Library (cgal.org) CGAL v5.6.1:https://github.com/CGAL/cgal/releases/download/v5.6.1/CGAL-5.6.1.tar.xz 确保C编译…

5款可用于LLMs的爬虫工具/方案

5款可用于LLMs的爬虫工具/方案 Crawl4AI 功能: 提取语义标记的数据块为JSON格式,提供干净的HTML和Markdown文件。 用途: 适用于RAG(检索增强生成)、微调以及AI聊天机器人的开发。 特点: 高效数据提取,支持LLM格式,多U…

改变浏览器大小,图片(img)内容居中显示img标签,不是背景图

改变浏览器大小,图片&#xff08;img&#xff09;内容居中显示&#xff0c;img标签&#xff0c;不是背景图 效果直接上图&#xff1a; 上代码&#xff1a; <!DOCTYPE html> <html> <head><title>测试图片居中显示&#xff0c;高度不变只变宽度<…

HCIP【BGP综合实验】

目录 一、实验拓扑图&#xff1a; 二、实验要求&#xff1a; 三、实验思路&#xff1a; 四、实验步骤&#xff1a; 1、进行网段的子网划分&#xff08;整个实验总共有19条网段&#xff09;&#xff1a; (1)首先&#xff0c;根据实验要求&#xff0c;将172.16.0.0/16全部划…

C语言学习(九)多文件编程 存储类型 结构体

目录 一、多文件编程&#xff08;一&#xff09;不写头文件的方方式进行多文件编程 &#xff08;二&#xff09;通过头文件方式进行多文件编程&#xff08;1&#xff09;方法&#xff08;2&#xff09;头文件守卫 &#xff08;三&#xff09; 使用多文件编程实现 - * / 功能 二…

系统设计中的泛化调用

背景 目前在学习一些中间件&#xff0c;里面看到了一个词是叫泛化调用&#xff0c; 其实这个场景在JAVA中比较常见。我们常用的有反射&#xff0c;反射就是我知道类名称、类方法和参数&#xff0c;调用一个Object的类&#xff0c;但是在HTTP或者RPC远程调用过程中&#xff0c;…

服务异步通讯MQ

同步调用存在的问题: 异步调用方案: RabbitMQ安装: 第一种:在线拉取 docker pull rabbitmq:3-management 第二种:将已有的安装包放入再用load加载 我这里放到tmp包里边 然后:cd /tmp docker load -i mq.tar 加载进去 然后运行mq容器 docker run \-e RABBITMQ_DEFAULT_USER…

【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”

看到这句话的时候证明&#xff1a;此刻你我都在努力~ 加油陌生人~ 个人主页&#xff1a; Gu Gu Study ​​ 专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努…

下水道井盖多分类检测定位

下水道井盖识别&#xff0c;多分类&#xff0c;使用yolov5训练&#xff0c;采用一部分开源数据集和自建数据集。python pytorch opencv 深度学习#人工智能#深度学习#目标检测

在STM32中用寄存器方式点亮流水灯

文章目录 实验资料一、对寄存器的理解1.通俗认识寄存器2.深入了解寄存器&#xff08;1&#xff09;端口配置低寄存器&#xff08;配置0到7引脚的寄存器&#xff09;&#xff08;2&#xff09;端口配置高寄存器&#xff08;配置8到15引脚&#xff09; 3.GPIO口的功能描述 二、配…

Git Bash和Git GUI设置中文的方法

0 前言 Git是一个分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。一般默认语言为英文&#xff0c;本文介绍修改Git Bash和Git GUI语言为中文的方法。 1 Git Bash设置中文方法 &#xff08;1&#xff09;鼠标右键&#xff0c;单击“Git B…

时间复杂度的简单讲解

小伙伴们大家好&#xff0c;我们又见面了&#xff0c;这次我们直接进入正题 时间复杂度的概念 时间复杂度的定义&#xff1a;在计算机科学中&#xff0c; 算法的时间复杂度是一个函数 &#xff0c;它定量描述了该算法的运行时间。一 个算法执行所耗费的时间&#xff0c;从理论…

公有云Linux模拟TCP三次挥手与四次握手(Wireshark抓包验证版)

目录 写在前面环境准备实验步骤1. 安装nc工具2. 使用nc打开一个连接2.1 公有云-安全组放行对应端口&#xff08;可选&#xff09; 3. 打开Wireshark抓包工具4. 新开终端&#xff0c;进行连接5. 查看抓包文件&#xff0c;验证TCP三次握手与四次挥手TCP三次握手数据传输TCP四次挥…

【C++杂货铺铺】AVL树

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 概念 &#x1f4c1; 节点的定义 &#x1f4c1; 插入 &#x1f4c1; 旋转 1 . 新节点插入较高左子树的左侧---左左&#xff1a;右单旋 2. 新节点插入较高右子树的右侧---右右&#xff1a;左单旋 3. 新节点插入较高左…

57 读取/写出/读取 文件的过程的调试

前言 问题来自于文章 请教文件读写问题 请教文件读写问题 - 内核源码-Chinaunix vim 编辑文件, 实际上删除了原有的文件建立了一个新的文件? Ls –ail . 查看 inode 编号不一样了 这里主要是 调试一下 这一系列流程 测试用例 就是一个程序, 读取 1.txt 两次, 两次之间间隔…

49. UE5 RPG 使用Execution Calculations处理对目标造成的最终伤害

Execution Calculations是Unreal Engine中Gameplay Effects系统的一部分&#xff0c;用于在Gameplay Effect执行期间进行自定义的计算和逻辑操作。它允许开发者根据特定的游戏需求&#xff0c;灵活地处理和修改游戏中的属性&#xff08;Attributes&#xff09;。 功能强大且灵…

国内智能搜索工具实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

C++新特性-线程

主要内容 thread、condition、mutexatomicfunction、bind使用新特性实现线程池&#xff08;支持可变参数列表&#xff09;异常协程其他 1 C11多线程thread 重点&#xff1a; join和detach的使用场景thread构造函数参数绑定c函数绑定类函数线程封装基础类互斥锁mutexconditi…

网络基础-Telnet协议

Telnet&#xff08;Telecommunication Network&#xff09;是一种基于文本的远程终端协议&#xff0c;允许用户通过网络连接到远程计算机&#xff0c;并在远程计算机上执行命令&#xff1b;它使用TCP作为传输层协议&#xff0c;并依赖于网络连接在客户端和服务器之间进行通信&a…