当前位置: 首页 > news >正文

lombok 的使用讲解

目录

  • 前言
  • 1. 基本知识
  • 2. 代码应用

前言

在项目中经常会看到lombok的应用,此文作为科普帖,详细介绍lombok

1. 基本知识

简介:
Project Lombok是一款用于Java开发的工具,旨在通过自动生成样板代码来简化Java代码的编写。
它通过注解(Annotation)的方式,帮助开发人员自动生成一些常见的Java代码,如Getter、Setter、构造函数等,从而减少样板代码的编写,提高开发效率。
工作原理:
Lombok通过在Java源代码中使用注解,实现了在编译阶段自动生成代码的功能。
当开发人员在类或字段上使用Lombok提供的注解时,Lombok在编译源代码时会通过插入AST(Abstract Syntax Tree)操作,在生成的Java字节码中加入相应的代码。这样,在运行时,代码中就包含了通过注解生成的代码,而开发人员无需手动编写这些冗长的代码。

其优缺点如下:

优点缺点
1.简化代码: Lombok通过自动生成常见的样板代码,减少了开发人员需要编写的代码量,提高了代码的简洁性。
2. 提高开发效率: 通过自动生成代码,开发人员能够更专注于业务逻辑,减少了重复性劳动,提高了开发效率。
3. 可读性: 由于生成的代码是标准的、一致的,提高了代码的可读性。
1.隐藏细节: 自动生成的代码可能会隐藏一些细节,开发人员可能不太容易理解具体的实现方式。
2. 不适用于所有场景: Lombok适用于生成一些常见的代码,但并不适用于所有的场景。在某些复杂的情况下,可能需要手动编写代码。
3. 工具依赖: 开发团队需要在开发环境中安装Lombok插件或者通过构建工具配置来支持Lombok,这增加了项目的工具依赖。

2. 代码应用

再最新版的idea中都有自动捆绑该插件,如果没有无法使用lombok则在软件中添加即可

先引入Maven文件中的依赖:

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>>${lombok.version}</version><scope>provided</scope>
</dependency>

对于lombok的注解,主要有如下:

  • @Setter 和 @Getter
import lombok.Getter;
import lombok.Setter;public class MyClass {@Getter@Setterprivate String name;
}

等价于:

public class MyClass {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}
  • @AllArgsConstructor
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;@NoArgsConstructor
@AllArgsConstructor
public class MyClass {private String name;private int age;
}

等价于:

public class MyClass {private String name;private int age;public MyClass() {// 无参构造方法}public MyClass(String name, int age) {// 有参构造方法this.name = name;this.age = age;}
}
  • @NoArgsConstructor :该注解使用在类上,提供无参构造

  • @Data :(包含了@Getter、@Setter、@ToString、@EqualsAndHashCode和@AllArgsConstructor的功能)
    需要注意的是:同时使用 @Data 和 @AllArgsConstructor 后 ,默认的无参构造函数失效,如果需要它,要重新设置 @NoArgsConstructor

import lombok.Data;@Data
public class MyClass {private String name;private int age;
}
  • @Log(这是一个泛型注解,具体有很多种形式):@Slf4j :在类上注解后,可直接调用log
log.info(xxxx);
  • @ToString :该注解使用在类上,编译后toString方法返回将会以字段的名称-值的形式输出

  • @EqualsAndHashCode :该注解使用在类上,同时生成 equals 和 hashCode 。

  • @NonNull :增加不为空判断

public NonNullExample(@NonNull Person person) {this.name = person.getName();
}

转换为:

public NonNullExample(@NonNull Person person) {if (person == null) {throw new NullPointerException("person");}this.name = person.getName();
}
  • @Cleanup:自动化关闭流,相当于 try with resource
@Cleanup
InputStream in = new FileInputStream(args[0]);
@Cleanup
OutputStream out = new FileOutputStream(args[1]);
  • @SneakyThrows :当我们需要抛出异常,在当前方法上调用,不用显示的在方法名后面写 throw
@SneakyThrows(Exception.class)
  • @Synchronized :方法中所有的代码都加入到一个代码块中,默认静态方法使用的是全局锁,普通方法使
    用的是对象锁,当然也可以指定锁的对象。
private final Object lock = new Object();@Synchronized("lock")public void foo() {// Do something}

相关文章:

lombok 的使用讲解

目录 前言1. 基本知识2. 代码应用 前言 在项目中经常会看到lombok的应用&#xff0c;此文作为科普帖&#xff0c;详细介绍lombok 1. 基本知识 简介&#xff1a; Project Lombok是一款用于Java开发的工具&#xff0c;旨在通过自动生成样板代码来简化Java代码的编写。 它通过注…...

echarts的使用

1. 普通版 其实主要就是option1&#xff0c;option1就是画的图 echats不能响应刷新&#xff0c;要想实时刷新监听刷新的值重新调用一下方法即可 html <div class"echart" style"width: 100%;height: calc(100% - 130px)" ref"main1">&l…...

js进阶笔记之构造函数

目录 一、构造函数 1、 创建对象 2、new执行过程 3、带参数构造函数 4、实例成员与静态成员 二、内置构造函数 1、Object静态方法 2、包装类型 3、Array 1、map方法 2、find方法 3、findIndex( ) 4、some与every 5、reverse() 6、reduce方法 7、forEach() …...

Codesys数据类型(2.7):扩展数据类型之 别名 详解

Codesys代码代写&#xff0c;程序开发&#xff0c;软件定制&#xff0c;bug修改&#xff0c;问题咨询&#xff1a; T宝搜索店铺【林磊教育】 定义及声明 别名的目的是声明出 基本数据类型&#xff0c;结构体&#xff0c;枚举、共用体(UNION)、功能块、指针备用名字&#xff0c…...

白盒子测试总结

白盒子测试&#xff0c;也称为结构测试、透明盒测试、逻辑驱动测试或基于代码的测试&#xff0c;是一种测试用例的设计方法。白盒测试需要全面了解被测试程序的内部逻辑结构&#xff0c;并对所有逻辑路径进行测试。其基本方法包括&#xff1a; 语句覆盖&#xff1a;设计若干个…...

字符数组基础知识

字符数组是存放字符数据的数组&#xff0c;其中每一个元素存放的值都是单个字符。 字符数组&#xff1a;由字符类型的元素组成&#xff0c;其定义与初始化方式&#xff0c;以及对数组元素的引用都与整数数组类似&#xff0c;代码示例 char c[5]{h,e,l,l,,o}; 注意&#xff1…...

Oracle EBS 重新打开库存会期间

由库存某些账务用户操作错误,如:汇率错误、单位转换错误、BOM单据用量错误,需要反向操作纠正少量而有影响成本比较大的数据。但是,库存会计期已经关闭,需要重新打开库存会计期。根据官方文整理一份重新打开库存期间的脚本: 测试Oracle EBS版本: RDBMS : 12.1.0.2.0 Orac…...

java项目之社区互助平台(ssm+vue)

项目简介 社区互助平台实现了以下功能&#xff1a; 1、一般用户的功能及权限 所谓一般用户就是指还没有注册的过客,他们可以浏览主页面上的信息。但如果有中意的社区互助信息时&#xff0c;要登录注册&#xff0c;只有注册成功才有的权限。2、管理员的功能及权限 用户信息的添…...

unity C#设置文件为不可见

unity C#设置文件为不可见 /// ///设置文件为隐藏// /// using UnityEngine; using System.IO;public class SetFolderInvisible : MonoBehaviour {private void Start(){string folderPath "Qi/Video";// 将文件夹属性设置为隐藏和系统SetFolderAttributes(folder…...

DITTEL控制器维修SENSITRON6-2AE

DITTEL工控产品维修包括&#xff1a;德国DITTEL平衡测试仪维修,DITTEL模块&#xff0c;过程监控模块&#xff0c;DITTEL控制器&#xff0c;平衡头&#xff0c;机电平衡头&#xff0c;显示器&#xff0c;平衡系统等产品。 DITTEL过程控制模块维修 DM6000是一个过程控制模块&…...

django restful framework序列化与反序列化

在前后端分离开发中&#xff0c;对于RESTfulAPI设置&#xff0c;一般需要将查询/更新数据以JSON方式进行返回。 序列化 Model.py from django.db import models class User(models.Model):username models.CharField(verbose_name用户名,max_length10)age models.IntegerF…...

Flutter:多线程Isolate的简单使用

在flutter中如果要使用线程&#xff0c;需要借助Isolate来实现。 简介 在Flutter中&#xff0c;Isolate是一种轻量级的线程解决方案&#xff0c;用于在应用程序中执行并发任务。Isolate可以被认为是独立于主线程的工作单元&#xff0c;它们可以在后台执行任务而不会阻塞应用程…...

SAP的一些当说不说的常识

ABAP中的WDA与FRMbopf restful和odata postman软件 SAP中MM模块相关 SAP 物料 移动类型 https://www.cnblogs.com/rainysblog/p/4133259.html T移动类型文本含义一般用途T-code101GR 收货直接收货工单入库&#xff0c;购买成品入库MIGO/CO11N102用于PO冲销的收货冲销直接…...

Java运行时数据区和常用指令

Java运行时数据区是Java虚拟机规范中定义的一块区域&#xff0c;用于存储Java程序在运行过程中需要使用到的数据。这些数据包括&#xff1a; 1. 堆区&#xff1a;用于存储对象实例&#xff0c;是Java内存中最大的一块区域。2. 方法区&#xff1a;用于存储已被虚拟机加载的类信…...

hdfsClient_java对hdfs进行上传、下载、删除、移动、打印文件信息尚硅谷大海哥

Java可以通过Hadoop提供的HDFS Java API来控制HDFS。通过HDFS Java API&#xff0c;可以实现对HDFS的文件操作&#xff0c;包括文件的创建、读取、写入、删除等操作。 具体来说&#xff0c;Java可以通过HDFS Java API来创建一个HDFS文件系统对象&#xff0c;然后使用该对象来进…...

【前端学java】语法练习-工具类的封装(13)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…...

Git 基本操作

目录 创建仓库命令 git init git clone 提交与修改 git add git status git diff git commit git reset git rm git mv git checkout git switch git restore 提交日志 git log git blame 远程操作 git remote git fetch git pull git push Git 的工作就…...

Oracle-分析函数(累计求和,排序等)

在Oracle中分析函数又称为开窗函数 分为以下两类&#xff1a; 第一类&#xff1a;是聚合分析函数&#xff0c;主要包含&#xff08;sum&#xff0c;count&#xff0c;AVG、MAX、MIN等&#xff09;&#xff0c;主要是对内部分组的数值按照要求内部聚合处理&#xff1b; 第二类&a…...

4本期刊被踢!11月SCI/SSCI目录已更新

​2023年11月20日&#xff0c;科睿唯安更新了Web of Science核心期刊目录。 此次更新后SCIE期刊目录共包含9481本期刊&#xff0c;SSCI期刊目录共包含3551本期刊。此次SCIE & SSCI期刊目录更新&#xff0c;与上次更新&#xff08;2023年10月&#xff09;相比&#xff0c;共…...

JS中Cookie的基本使用

JavaScript 创建Cookie&#xff1a; JavaScript 读取 Cookie &#xff1a; JavaScript 修改 Cookie&#xff1a; JavaScript 删除 Cookie &#xff1a; JavaScript Cookie&#xff08;JavaScript 的 Cookie&#xff09;是一种在Web浏览器中存储和检索用户信息的机制。它允许…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...