介绍
Lombok 是一个充当 Java 注释处理器的库,旨在消除代码中的冗余。它的主要功能是自动生成重复代码或“样板文件”——这些元素虽然必要,但不会为我们的程序逻辑添加直接价值。主要用于在编译时自动生成 getter 和 setter 方法、构造函数、equals()、hashCode()、toString() 方法以及 Java 类中的其他常见元素。
无需为这些基本功能手动编写数十行代码,Lombok 允许您使用简单的注释来定义它们,从而产生更干净、更易于维护且不易出错的代码。
设施
要在Java项目中使用Lombok,除了安装之外,还需要在pom.xml文件(如果是Maven项目)或build.gradle(如果是Gradle项目)中添加相应的依赖我们正在使用的IDE中的相应插件。在这篇文章中,我们将使用 Maven 和 IntelliJ IDEA 作为示例。
<dependencies> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <version>1.18.36</version> <scope>provided</scope> </dependency> </dependencies>
如有任何疑问,您可以随时查看Lombok的官方文档:
- Lombok 与 Maven
- IntelliJ IDEA 中的 Lombok
@数据
当我们创建一个类时,我们会定期执行以下操作,无论是手动还是使用 IDE 提供的快捷方式:
- 封装属性并生成其getter和setter方法
- 生成一个空的构造函数和另一个接收所有属性的
- 实现 equals()、hashCode() 和 toString() 方法
嗯,Lombok 有 @Data 注释,它允许我们在一行中完成所有这些操作,生成与 POJO(普通旧 Java 对象) 相关的所有内容。这个注解是 @Getter、@Setter、@EqualsAndHashCode、@NoArgsConstructor 和 @AllArgsConstructor 注解的组合,我们稍后会看到。
import lombok.Data; @Data public class Persona { private String nombre; }
public class Main { public static void main(String[] args) { Persona p1 = new Persona(); p2.setNombre("Maria"); System.out.println(p1.getNombre()); } }
@NoArgsConstructor、@AllArgsConstructor 和 @RequiredArgsConstructor
这些注释允许我们自动生成具有不同参数组合的构造函数,考虑到属性是根据它们在类中声明的顺序使用的。
- @NoArgsConstructor:生成一个无参构造函数(空),如果无法生成,则会抛出异常,为了避免这种情况,只需使用如下注解 @NoArgsConstructor(force = true)。
- @AllArgsConstructor:生成一个构造函数,以类的所有属性作为参数。
- @RequiredArgsConstructor:为所有最终字段生成构造函数和/或用 @NonNull 注释进行标记。
<dependencies> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <version>1.18.36</version> <scope>provided</scope> </dependency> </dependencies>
@Getter 和 @setter
这些注解可以让我们自动为类的所有属性生成 getter 和 setter 方法,或者只为那些标有相应注解的属性生成 getter 和 setter 方法,即可以在类或属性级别使用。
import lombok.Data; @Data public class Persona { private String nombre; }
public class Main { public static void main(String[] args) { Persona p1 = new Persona(); p2.setNombre("Maria"); System.out.println(p1.getNombre()); } }
@ToString
该注解自动生成 toString() 方法,该方法返回类及其属性的字符串表示形式,格式如下:ClassName(attribute1=value1, attribute2=value2, ...)。默认情况下,类的所有非静态属性都包含在结果中,但可以使用 @ToString.Exclude 属性排除特定属性。如果您只想显示属性的值而不是声明的名称,可以使用 @ToString(includeFieldNames = false)。
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Persona { private String nombre; }
@EqualsAndHashCode
允许您从类的所有属性生成 equals() 和 hashCode() 方法,如果您想排除或包含某个属性,可以使用注释 @EqualsAndHashCode.Exclude 和 @EqualsAndHashCode.Include 来实现。分别。
import lombok.*; @Getter @Setter public class Persona { private String nombre; private String apellido; }
@价值
以前,在 Java 中创建不可变类需要执行一系列步骤,例如使类和/或属性成为最终类型,并且不会生成 setter 方法。 Lombok 使我们可以轻松地使用 @Value 注解创建不可变类,该注解结合了 @Getter、@ToString、@EqualsAndHashCode 和 @AllArgsConstructor 注解来生成不可变类。所有属性都标记为 private Final,并且不会生成 setter 方法。它是 @Data 的不可变变体。
import lombok.*; public class Persona { @Getter @Setter private String nombre; private String apellido; }
在 Java 的最新版本中,与使用记录相比,此注释失去了意义,因为它们具有相同的目的,并且使用记录更实用。如果您有兴趣了解更多有关此主题的信息,博客上还有更多有关记录的帖子。
<dependencies> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <version>1.18.36</version> <scope>provided</scope> </dependency> </dependencies>
@val
这个注解允许我们将一个变量声明为final并自动推断它的数据类型,也就是说,不需要指定变量的数据类型,Lombok会负责推断它。如果变量数据类型很长或很复杂,它很有用,这样可以避免重复。
import lombok.Data; @Data public class Persona { private String nombre; }
如果我们直接使用final var或者简单的var进行类型推断,这个注解可能会失去意义,因为这是语言的特性,这样更方便。如果您有兴趣了解更多,可以参考以下帖子
public class Main { public static void main(String[] args) { Persona p1 = new Persona(); p2.setNombre("Maria"); System.out.println(p1.getNombre()); } }
@var
它的工作方式与@val完全相同,但它不将变量声明为final,它只是推断其类型。有必要考虑类型推断的概念,因为您不能声明 String 类型的内容,并且想要为其分配 int 类型的值也不是最终的。同样,在最新版本的 Java 中,该注释被 var 取代。
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Persona { private String nombre; }
@非空
这个注解可以用在类的属性和方法的参数上,它基本上表明属性的值不能为空,如果尝试将空值分配给标记为@NonNull的属性,它会抛出 NullPointerException,即使用 if (param == null) throw new NullPointerException("param is tagged non-null but is null"); 。无论它生成什么异常,它的使用在 IDE 本身中都更加明显,因为它会以某种方式向我们表明该值不能为空。
import lombok.*; @Getter @Setter public class Persona { private String nombre; private String apellido; }
@清理
此注释允许我们确保任何使用它的资源(如果它具有 close() 方法或实现 AutoCloseable 或 Closeable 接口)都会在其所在代码块的末尾自动关闭。它在处理需要释放的资源时非常有用,例如文件、数据库连接等。
import lombok.*; public class Persona { @Getter @Setter private String nombre; private String apellido; }
如果我们使用资源尝试,可以手动获得此结果。
import lombok.*; @AllArgsConstructor @ToString public class Persona { private String nombre; @ToString.Exclude private String apellido; } // Output: Persona(nombre=Maria)
@builder
这个注解可以让我们自动生成一个设计模式Builder,即一个可以让我们一步步构建复杂对象的对象,这样就可以配置一个对象的不同属性,而无需调用带有多个参数的构造函数。如果一个类有很多属性并且我们不希望有一个带有很多参数的构造函数,那么它很有用。
<dependencies> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <version>1.18.36</version> <scope>provided</scope> </dependency> </dependencies>
@和
这个注解允许我们创建一个方法,该方法返回带有修改属性的当前对象的副本,即它生成一个方法 withAttributeName(Object object) ,该方法允许我们用该对象创建当前对象的副本属性由我们作为参数传递的值修改。当我们想要修改对象的属性而不修改原始对象时,它非常有用。
import lombok.Data; @Data public class Persona { private String nombre; }
public class Main { public static void main(String[] args) { Persona p1 = new Persona(); p2.setNombre("Maria"); System.out.println(p1.getNombre()); } }
到目前为止,我们已经看到了一些最常用的注释,每个注释可能接受也可能不接受额外的配置,同样还有其他注释被标记为实验性的,无论如何,参考很重要官方文档,以充分利用 Lombok 为我们提供的所有功能以及重复代码生成方面的优势。
以上是Java 中的 Lombok 项目的详细内容。更多信息请关注PHP中文网其他相关文章!

本文分析了2025年的前四个JavaScript框架(React,Angular,Vue,Susve),比较了它们的性能,可伸缩性和未来前景。 尽管由于强大的社区和生态系统,所有这些都保持占主导地位,但它们的相对人口

本文介绍了SnakeyAml中的CVE-2022-1471漏洞,这是一个允许远程代码执行的关键缺陷。 它详细介绍了如何升级春季启动应用程序到Snakeyaml 1.33或更高版本的降低风险,强调了依赖性更新

Node.js 20通过V8发动机改进可显着提高性能,特别是更快的垃圾收集和I/O。 新功能包括更好的WebSembly支持和精制的调试工具,提高开发人员的生产率和应用速度。

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

本文探讨了在黄瓜步骤之间共享数据的方法,比较方案上下文,全局变量,参数传递和数据结构。 它强调可维护性的最佳实践,包括简洁的上下文使用,描述性

本文使用lambda表达式,流API,方法参考和可选探索将功能编程集成到Java中。 它突出显示了通过简洁性和不变性改善代码可读性和可维护性等好处


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载
最流行的的开源编辑器