当前位置: 首页 > 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浏览器中存储和检索用户信息的机制。它允许…...

Python量化交易框架实战:从事件驱动架构到策略回测全解析

1. 项目概述&#xff1a;量化交易的开源工具箱最近几年&#xff0c;量化交易的热度持续不减&#xff0c;无论是机构还是个人开发者&#xff0c;都在寻找高效、可靠的策略研发与回测工具。如果你也在这个领域摸索&#xff0c;大概率听说过或者用过一些知名的开源框架&#xff0c…...

Sverklo:为AI编程助手注入代码结构智能,实现精准搜索与安全重构

1. 项目概述&#xff1a;当AI助手开始“理解”你的代码如果你和我一样&#xff0c;日常重度依赖像Claude Code、Cursor这类AI编程助手&#xff0c;那你一定也经历过那种“血压升高”的时刻&#xff1a;你让它修改一个核心函数&#xff0c;它改得飞快&#xff0c;代码看起来也像…...

Orcha:为AI编程助手构建微服务架构感知的智能工作空间

1. 项目概述&#xff1a;为AI智能体装上“工作空间大脑” 如果你和我一样&#xff0c;正在一个由多个独立代码仓库组成的微服务架构里折腾&#xff0c;并且尝试用Claude Code、Cursor这类AI编程助手来提升效率&#xff0c;那你肯定遇到过这样的场景&#xff1a;每次打开一个新的…...

ClawScript:专为量化交易与AI自动化设计的领域特定语言

1. 项目概述&#xff1a;ClawScript&#xff0c;一个为交易与自动化而生的领域特定语言如果你像我一样&#xff0c;在量化交易和自动化流程的构建上投入了大量时间&#xff0c;那你一定对那种在通用编程语言的灵活性与专用交易平台的便捷性之间反复横跳的体验深有感触。用Pytho…...

知识蒸馏与Transformer在能源管理中的轻量化实践

1. 知识蒸馏与Transformer强化学习在能源管理中的融合实践在住宅能源管理系统&#xff08;EMS&#xff09;中&#xff0c;电池调度决策需要实时响应电价波动和用电需求变化。传统基于规则的控制方法难以适应复杂动态环境&#xff0c;而深度强化学习&#xff08;DRL&#xff09;…...

机器学习高效工作流:ml-retreat深度工作法实战指南

1. 项目概述&#xff1a;当机器学习遇上“静修”最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫hesamsheikh/ml-retreat。初看这个标题&#xff0c;你可能会有点摸不着头脑&#xff1a;“ml”是机器学习&#xff08;Machine Learning&#xff09;没跑&…...

双足机器人CBF-MPC高速动态避障技术解析

1. 机器人动态避障技术概述 在双足机器人运动控制领域&#xff0c;实现高速状态下的实时避障一直是极具挑战性的课题。传统方法往往需要在运动速度与安全性之间做出妥协——要么降低移动速度以保证避障反应时间&#xff0c;要么简化环境复杂度来满足实时性要求。而基于CBF-MPC&…...

量子计算中的非厄米线性响应理论与薛定谔化技术

1. 量子计算中的非厄米线性响应理论解析在量子计算领域&#xff0c;非厄米系统的研究正逐渐成为前沿热点。传统量子模拟主要关注封闭系统的厄米哈密顿量演化&#xff0c;而现实世界中的量子系统往往与环境存在不可忽略的相互作用&#xff0c;导致系统表现出非厄米特性。这种开放…...

基于SocialDAO与隐私计算构建性勒索预防援助系统

1. 项目概述与核心问题拆解最近几年&#xff0c;一个令人不安的词汇在数字世界的阴暗角落频繁出现——“性勒索”。它不再是电影里的情节&#xff0c;而是真实发生在普通人身上的数字噩梦。简单来说&#xff0c;性勒索就是利用受害者的私密影像或信息&#xff0c;以公开、传播为…...

主动学习加速广义Benders分解求解混合整数经济模型预测控制

1. 项目概述与核心价值最近在做一个挺有意思的项目&#xff0c;核心是把一个听起来很“学术”的算法——广义Benders分解&#xff0c;和工业界里越来越火的经济模型预测控制给揉到了一起&#xff0c;并且用主动学习这个思路去优化整个求解过程。乍一听&#xff0c;这标题里又是…...