Lombok Java2025年12月5日 | 13分钟阅读 Java 是最流行的面向对象编程语言,但它也有一些缺点。主要的缺点是需要编写大量的样板代码。为了克服这个缺点,Lombok 项目应运而生。它是一个可以为您的 Java 应用程序增添色彩的工具。在本节中,我们将讨论Lombok 项目、功能、Lombok 包。 ![]() 什么是 Lombok 项目?Lombok 项目是一个流行且广泛使用的 Java 库,可以最小化或消除样板代码。它可以节省时间和精力。只需使用注解,我们就可以节省空间并提高源代码的可读性。它可以自动集成到 IDE 和构建工具中,为您的 Java 应用程序增添色彩。 这是通过引入注解来实现的,这些注解可以自动创建 getter、setter、构造函数、equals()、hashCode() 和 toString() 方法——所有这些都是典型的 Java 代码结构。 这里会有一个问题:Lombok 项目和 IDE 是否做相同的工作?如果是,Lombok 有什么用? 答案是否定的,IDE 和 Lombok 的工作不同,但非常相似。当我们使用 IDE 生成这些样板代码(getter 和 setter)时,我们节省了手动编写 getter 和 setter 的精力,但它们实际上存在于源代码中,增加了代码行数,降低了可维护性和可读性。而 Lombok 项目则在编译时将所有这些样板代码添加到类文件中,而不是添加到原始源代码中。 Lombok Java API 包含以下可用于不同目的的包。
为什么选择 Lombok 项目?假设我们正在开发一个 Java 应用程序,其中需要一个具有多个私有字段的 POJO 文件。对于这些字段,我们必须生成 getter 和 setter 访问方法以提供访问。为每个字段生成 getter 和 setter 会增加代码行数。 此外,添加一个构造函数和一个 toString() 方法会产生更多的代码行数,并导致混乱。当我们使用需要在使用后关闭的 Java 对象时,需要编码 finally-block 或使用 try-with-resources 来确保对象关闭。添加 finally-block 样板代码来关闭对象会使代码产生大量混乱。因此,我们处理大量的样板代码。 为了解决同样的问题,Lombok 项目应运而生。 Lombok 项目提供了各种注解,可用于生成常见的 Java 代码结构,例如:
这些注解使开发人员能够减少手动编写样板代码的数量,从而提高代码的可读性和可维护性。 Lombok 项目的特点
Java Lombok 包该包包含使用 Lombok 所需的所有注解和类。除以下两个包外,所有其他包仅适用于扩展 Lombok 以供自己使用的人员。
@ToString、@EqualsAndHashCode、@NonNull、@NoArgsConstructor 和 @AllArgsConstructor 是几个常用的 Lombok 类和注解。通过自动生成构造函数、toString()、equals() 和 hashCode() 方法、可空性测试和其他功能。这些注解减少了人工实现的需要,并有助于简化代码。 Java Lombok 包包含以下类和注解。
使用 Lombok 项目的目的使用 Lombok 有几个原因,其中一些如下: 检查空值 这是 Lombok 提供的最基本的功能。该库提供了 @NonNull 注解,可用于在 setter 字段上生成空值检查。如果带注解的类字段包含空值,它将抛出 NullPointerException。请注意,我们不能注解原始参数。使用 @NonNull 注解。例如,考虑以下代码片段。 上面的代码与 简洁的数据对象如果 POJO 文件中有多个私有字段,则生成 getter 和 setter 可能是一项繁琐的工作。使用 Lombok 的 @Getter 和 @Setter 注解可以轻松完成这项工作。例如,考虑以下代码。 未使用 Lombok 项目 使用 Lombok 项目 我们观察到代码变得更加简洁且不易出错。请注意,@Getter 和 @Setter 注解还接受一个可选参数来指定访问级别(如果需要)。一个好处是它负责命名约定。例如,它为布尔字段生成一个以 is 开头的访问方法,而不是 get。如果它们应用于类级别,则为类中的每个非静态字段生成 getter 和 setter。 生成 Getter 和 Setter@Data 注解可用于应用所有注解背后的功能。这意味着用 @Data 注解一个类,Lombok 会为所有非静态类字段生成 getter 和 setter,以及一个类构造函数。它与 toString()、equals() 和 hashCode() 策略相同。它使 POJO 的编码异常简单。 注意:如果我们手动创建 getter 和 setter,Lombok 不会生成代码,即使字段已带注解。自动生成构造函数 它提供了两个注解来生成构造函数,即 @AllArgsConstructor 和 @NoArgsConstructor。@AllArgsConstructor 注解生成一个包含所有声明字段的构造函数。如果添加或删除了任何字段,构造函数也会随之更改。@NoArgsConstructor 注解仅生成不带参数的构造函数。 为 Final 字段生成 Getter @Value 注解与 @Data 注解相同。它是一个类级别的注解。唯一的区别是它生成一个不可变类。它会自动为所有私有和final字段生成 getter。请注意,它不会为任何字段生成setter,并将类标记为 final。 减少样板代码 Lombok 有助于减少开发人员需要编写的样板代码量,例如 getter、setter、构造函数和 toString() 方法。它允许开发人员将更多精力放在编写业务逻辑而不是重复性代码上。 不可变对象 Lombok 提供了 @Value 和 @Wither 等注解,可轻松创建不可变对象。不可变对象是线程安全的,有助于防止对象状态意外更改。 Builder 模式 借助 Lombok 的 @Builder 注解,开发人员可以轻松地为他们的类实现 builder 模式,从而实现更具可读性和更流畅的对象创建。 日志集成 Lombok 提供了 @Slf4j 和 @Log 等注解,可在类中自动生成日志记录器字段,使日志集成更轻松,跨代码库更一致。 自动 Equals 和 HashCode Lombok 的 @EqualsAndHashCode 注解根据类的字段生成 equals() 和 hashCode() 方法的实现,从而降低了错误风险并确保了行为的一致性。 简化的异常处理 Lombok 的 @SneakyThrows 注解允许开发人员在不声明检查型异常的情况下抛出它们,从而减少了代码混乱并提高了可读性。 简洁的空值检查 除了 @NonNull,Lombok 还提供了 @Nullable 和 @Cleanup 等注解,以分别简化空值检查和资源清理。 Lombok 提供了范围广泛的功能和注解,通过减少冗长和消除重复任务,可以极大地提高 Java 项目的生产力和代码质量。 在 Eclipse IDE 中配置 Lombok要将 Lombok 项目配置到 Eclipse IDE 中,请按照以下步骤操作: 步骤 1:首先,下载 lombok.jar 文件。 步骤 2:要执行上述 JAR 文件,请双击下载的 JAR 文件。屏幕上会出现一个 GUI,我们在其中指定要在其上配置 Lombok 项目的 IDE。 ![]() 步骤 3:单击指定位置按钮,然后浏览安装 Eclipse IDE 的目录。从文件夹中选择 eclipse.exe 文件。 ![]() 步骤 4:单击安装/更新按钮。 完成上述过程后,请检查项目 Lombok 是否已成功安装。 步骤 5:打开 eclipse IDE -> 帮助 -> 关于 Eclipse IDE。如果列出了 Lombok 项目,则表示已正确安装。 ![]() 步骤 6:最后,单击关闭按钮。 Lombok 项目已成功集成到 Eclipse IDE 中。 未使用 Lombok 的 Java 程序首先,我们将创建一个不使用 Lombok 的 Java 程序,以查看区别。 Student.java WithoutLombok.java 输出 Student [studentId=1, studentName=John Doe, studentClass=Class 10, studentEmailId=john.doe@example.com] Student ID: 1 Student Name: John Doe Student Class: Class 10 Student Email ID: john.doe@example.com Student [studentId=1, studentName=Jane Doe, studentClass=Class 11, studentEmailId=jane.doe@example.com] 解释 提供的 Java 代码定义了一个 Student 类,其中包含 studentId、studentName、studentClass 和 studentEmailId 等私有属性,代表学生的各种详细信息。它包含一个默认构造函数和一个参数化构造函数来初始化这些属性。此外,还为每个属性手动实现了 getter 和 setter 方法,以提供访问和修改功能。toString() 方法被重写,以返回 Student 对象的字符串表示形式,连接其属性。 要运行该程序,您通常会创建一个单独的主类(Main class),其中包含一个 main 方法,在该方法中实例化 Student 类,在必要时使用 setter 方法设置其属性,并通过 toString() 方法或单个 getter 方法打印其详细信息。此代码展示了 Java 中面向对象编程的一个简单示例,演示了 Student 类的对象的创建和操作。 让我们用 Lombok 来考虑上面的代码。 带有 Lombok 的 Java 程序在以下程序中,我们使用了常用的 Lombok 注解来使我们的代码简洁。 Employee.java WithLombok.java 输出 Student(sttudentId=1, studentName=John Doe, studentClass=Class 10, studentEmailId=john.doe@example.com) Student ID: 1 Student Name: John Doe Student Class: Class 10 Student Email ID: john.doe@example.com 解释 提供的 Java 代码利用 Lombok 注解来更有效地定义 Student 类。该代码通过使用 @NoArgsConstructor、@AllArgsConstructor、@Getter、@Setter 和 @ToString 等注解,消除了显式实现构造函数、getter 和 setter 方法以及 toString() 函数的需要。 @NoArgsConstructor 注解由一个不带参数的构造函数生成,而 @AllArgsConstructor 注解由类中每个字段的参数构造函数生成。toString() 函数返回对象状态的字符串表示形式,可以通过 @ToString 注解自动创建。此外,@Getter 和 @Setter 注解由类字段的 getter 和 setter 方法生成。 |
形数是数字序列的经典来源。在本节中,我们将学习什么是形数,并创建 Java 程序来检查给定的数字是否为形数。形数程序经常在...中询问。
阅读 8 分钟
二维码是 Quick Response code 的缩写。它是条形码的替代品,或者我们可以说它是一个二维条形码。它包含一个小方块的矩阵,其中存储了信息。它的工作原理与条形码相同。它...
5 分钟阅读
图案程序通常在面试中被问及,以检查逻辑实现和循环概念。在前一节中,我们讨论了各种图案,如三角形、树形、星形等。在本节中,我们将学习如何通过 Java 打印皇冠图案...
阅读 6 分钟
?在 Java 编程的世界里,流已成为一种强大而通用的概念,用于以简洁高效的方式处理数据集合。流在 Java 8 中引入,它提供了一种函数式的方法来处理数据,使开发人员能够对...执行复杂的数据操作。
7 分钟阅读
排序是将列表或数组的元素按特定顺序排列的一种方法。顺序可以是升序或降序。数值顺序和字典序(字母顺序)是一种广泛使用的顺序。在本节中,我们将学习如何对数组进行排序...
阅读 6 分钟
这是原始数据类型。它用于声明字符类型的变量和方法。它能够存储无符号的 16 位 Unicode 字符。要点:char 的范围在 0 到 65,535(含)之间。它的默认值为“\u0000”。它的默认大小为 2...
阅读 2 分钟
最新的长期支持(LTS)版本是 Java 12,这是自 Java 11 以来第一个“短期”版本,于 2019 年 3 月 19 日发布。在 Java 的 LTS 版本 11 之后,Java 12 发布了。6 个月的发布周期适用于 JDK 12。2019 年 3 月 19 日,...
阅读 13 分钟
Java 是最流行的面向对象编程语言。它提供了开发人员青睐的各种显著特性。这就是为什么数十亿台设备运行 Java 的原因。在本节中,我们将讨论 Java 的安全性。Java...
阅读 3 分钟
在 Java 编程中,null 的概念既基本又无处不在。它代表了引用类型值的缺失,并且是开发人员处理未初始化对象或数组情况的关键工具。理解 null 对于...至关重要。
阅读 3 分钟
: import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; public class OpenMenu extends JFrame implements ActionListener{ JMenuBar mb; JMenu file; JMenuItem open; JTextArea ta; OpenMenu(){ open=new JMenuItem("打开文件"); open.addActionListener(this); file=new JMenu("文件"); file.add(open); mb=new JMenuBar(); mb.setBounds(0,0,800,20); mb.add(file); ta=new JTextArea(800,800); ta.setBounds(0,20,800,800); add(mb); add(ta); } public void actionPerformed(ActionEvent e) { if(e.getSource()==open){ openFile(); } } void openFile(){ JFileChooser fc=new JFileChooser(); int i=fc.showOpenDialog(this); if(i==JFileChooser.APPROVE_OPTION){ File f=fc.getSelectedFile(); String filepath=f.getPath(); displayContent(filepath); } } void displayContent(String fpath){ try{ BufferedReader br=new BufferedReader(new FileReader(fpath)); String s1="",s2=""; while((s1=br.readLine())!=null){ s2+=s1+"\n"; } ta.setText(s2); br.close(); }catch (Exception...
阅读1分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India