Lombok新版超全面使用教程

一、Lombok介绍

Lombok是一个Java库,可以通过注解来简化Java类的编写,减少冗余的样板代码。它提供了一系列的注解,用于自动生成常见的代码,如getter和setter方法、构造函数、equals和hashCode方法、toString方法等。通过使用Lombok,开发者可以更加专注于业务逻辑的实现,减少了繁琐的重复劳动。

二、Lombok常用注解

2.1  @Getter/@Setter 

@Getter和@Setter注解是Lombok库的一部分,它们会自动为你的类生成getter和setter方法。这些方法通常用于访问类的私有字段。可以添加在类上或者方法上。

这是如何使用这些注解的一些基本示例:

import lombok.Getter;
import lombok.Setter;@Getter
@Setter
public class User {private String name;private int age;private String password;}

AccessLevel是Lombok中的一个属性,用于指定生成的getter、setter方法的访问级别。

AccessLevel有三个可选值:

  1. AccessLevel.PUBLIC:生成public访问级别的getter方法。
  2. AccessLevel.PROTECTED:生成protected访问级别的getter方法。
  3. AccessLevel.NONE:不生成getter方法,属性保持私有,无法从外部访问。

 上面的基本示例代码如果希望外部不能操作password属性,即可使用AccessLevel属性

import lombok.Getter;
import lombok.Setter;@Getter
@Setter
public class User {private String name;private int age;@Getter(AccessLevel.NONE)@Setter(AccessLevel.NONE)private String password;
}

 

2.2  @ToString

@ToString是Lombok库中的一个注解,用于自动生成toString方法。通过在类上添加@ToString注解,Lombok将根据类的字段生成一个toString方法,返回一个包含类名和字段值的字符串。

下面是一个使用@ToString注解的示例:

import lombok.ToString;@ToString
public class Person {private String name;private int age;
}

 在这个示例中,Lombok会自动生成一个toString方法,如下所示:

public String toString() {return "Person(name=" + this.getName() + ", age=" + this.getAge() + ")";
}

2.3  @EqualsAndHashCode

@EqualsAndHashCode是Lombok库中的一个注解,它自动生成equals()hashCode()方法。当你在类上添加@EqualsAndHashCode注解后,Lombok会根据类的字段生成相应的equals()hashCode()方法。

equals()方法用于比较两个对象是否相等,而hashCode()方法返回对象的哈希码值。在Java中,这两个方法是Object类的一部分,用于支持对象比较和散列操作。

以下是一个使用@EqualsAndHashCode注解的示例:

import lombok.EqualsAndHashCode;@EqualsAndHashCode
public class Person {private String name;private int age;
}

Lombok将根据这个类的字段生成以下equals()hashCode()方法:

@Override
public boolean equals(Object obj) {if (this == obj) return true;if (obj == null || getClass() != obj.getClass()) return false;Person person = (Person) obj;return age == person.age && Objects.equals(name, person.name);
}@Override
public int hashCode() {return Objects.hash(name, age);
}

2.4  @NonNull

@NonNull 是 Lombok 库中的一个注解,用于指示一个参数、返回值或字段不能为 null。当你在类的方法或字段上使用 @NonNull 注解时,Lombok 会自动生成校验代码,确保该方法或字段在使用前不为 null。

以下是一个使用 @NonNull 注解的示例:

import lombok.NonNull;public class Example {@NonNullprivate String name;public void setName(@NonNull String name) {this.name = name;}public String getName() {return name;}
}

在上面的示例中,name 字段和 setName() 方法都使用了 @NonNull 注解。这表示 name 字段不能为 null,如果尝试将 null 值赋给 name,Lombok 将自动生成校验代码抛出异常。同样,setName() 方法也不会允许传入 null 参数。

使用 @NonNull 注解可以帮助开发人员避免空指针异常,并在编译时检查非空约束。它是一种方便的工具,可以提高代码的可读性和健壮性。

2.5  @NoArgsConstructor

@NoArgsConstructor 是 Lombok 库中的一个注解,用于自动生成一个无参构造函数。当你在类上添加 @NoArgsConstructor 注解时,Lombok 会根据类的字段生成一个无参构造函数。

2.6  @RequiredArgsConstructor(了解)

 @RequiredArgsConstructor 是 Lombok 库中的一个注解,它会自动生成一个包含所有需要特殊处理(例如,需要使用 final 修饰符或@NonNull注解)的参数的构造函数。当你在类上添加 @RequiredArgsConstructor 注解时,Lombok 会根据类的字段生成一个构造函数,该构造函数的参数是使用final关键字修饰的参数或使用@NonNull注解的参数。

2.7  @AllArgsConstructor

@AllArgsConstructor 是 Lombok 库中的一个注解,用于自动生成一个包含所有字段的构造函数。当你在类上添加 @AllArgsConstructor 注解时,Lombok 会为该类生成一个包含所有字段的构造函数。这个构造函数会使用参数的名字作为参数的名称。

2.8  @Data(最常用)

@Data 是 Lombok 库中的一个注解,它为 Java 类自动生成 getter、setter 方法、toString() 方法、equals()、hashCode() 和 和特殊处理(使用 final 修饰符或@NonNull注解)的参数的构造函数。通过在类上添加 @Data 注解,Lombok 会根据类的字段生成这些方法。

具体来说,@Data 注解包含以下四个子注解:

  1. @Getter 和 @Setter:为类的字段生成 getter 和 setter 方法。
  2. @ToString:为类生成 toString() 方法,该方法返回类的实例的字符串表示形式。
  3. @EqualsAndHashCode:为类生成 equals() 和 hashCode() 方法。
  4. @RequiredArgsConstructor:为类生成一个包含所有需要特殊处理(使用 final 修饰符或@NonNull注解)的参数的构造函数。

请注意,如果你使用 @Data 注解,Lombok 会自动生成这些方法,而无需手动编写这些代码。

@Data 
public class User {private String name;private int age;
}

2.9  @Builder(炫技必备,链式编程)

@Builder 是 Lombok 库中的一个注解,用于自动生成一个 builder 类。通过在类上添加 @Builder 注解,Lombok 会为该类生成一个 builder 类,该 builder 类具有用于设置每个字段的 setter 方法以及一个用于创建最终对象的 build() 方法。

使用 @Builder 注解可以简化代码,并使代码更易于阅读和维护。它使得代码更加清晰明了,避免了手动编写 builder 类的繁琐过程。

周式概括:在实体类上使用@Builder注解后,在实体类中会生成一个builder()方法,该方法用于return一个对应的builder类(构造器)。在构建器中,实体类中的每个参数,都会对应创建类似于 setter 的方法,方法名与该参数名相同,并且返回值是构建器本身(便于链式调用)。还会提供一个会build 方法,return实体类对象。

@Builder
public class User {private String username;private String password;
}

编译后

public class User {private String username;private String password;User(String username, String password) {this.username = username;this.password = password;}public static User.UserBuilder builder() {return new User.UserBuilder();}public static class UserBuilder {private String username;private String password;UserBuilder() {}public User.UserBuilder username(String username) {this.username = username;return this;}public User.UserBuilder password(String password) {this.password = password;return this;}public User build() {return new User(this.username, this.password);}public String toString() {return "User.UserBuilder(username=" + this.username + ", password=" + this.password + ")";}}
}

1.在实体类中:会创建一个 builder 方法,它的目的是用来创建构建器

2.创建一个名为 ThisClassBuilder 的内部静态类,并具有和实体类相同的属性(称为构建器)

3.在构建器中:对于目标类中的所有的属性和未初始化的 final 字段,都会在构建器中创建对应属性

4.在构建器中:创建一个无参的 default 构造函数

5.在构建器中:实体类中的每个参数,都会对应创建类似于 setter 的方法,方法名与该参数名相同。 并且返回值是构建器本身(便于链式调用)

6.在构建器中:会创建一个 build 方法,调用 build 方法,就会根据设置的值进行创建实体对象

7.在构建器中:会生成一个 toString 方法

USer user = User.builder().username("admin").password("admin).build();

2.10  @Slf4j

@Slf4j是Lombok库中的一个注解,它可以为Java类自动添加一个名为log的日志记录器。@Slf4j注解使用了SLF4J(Simple Logging Facade for Java)日志框架。通过使用@Slf4j注解,您无需手动创建private static final Logger log = LoggerFactory.getLogger(YourClassName.class)这样的日志记录器,而是直接使用log变量进行日志记录。

使用@Slf4j注解的示例代码如下所示:

import lombok.extern.slf4j.Slf4j;@Slf4j
public class MyClass {public void myMethod() {log.debug("Debug log message");log.info("Info log message");log.error("Error log message");}
}

在上述代码中,通过使用@Slf4j注解,即可在MyClass中自动添加一个名为log的日志记录器。然后,您可以在方法中使用log变量来记录日志。在示例中,使用了不同的日志级别(debug、info和error)记录不同级别的日志信息。

三、Lombok使用 

3.1 引入依赖:

 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>

3.2 安装插件(第一次使用时)

IDEA中File->Settings->Plugins,搜索安装Lombok插件。

3.3 在Java类中使用Lombok注解

在Java类中使用Lombok注解:您可以在需要简化的Java类中使用Lombok的注解来自动生成代码。以下是一些常用的Lombok注解:

通过在类上添加这些注解,Lombok会自动生成相应的代码。

  • @Getter / @Setter: 自动生成字段的getter和setter方法。
  • @ToString: 自动生成toString()方法,用于输出对象的字符串表示。
  • @EqualsAndHashCode: 自动生成equals()hashCode()方法。
  • @NoArgsConstructor / @RequiredArgsConstructor / @AllArgsConstructor: 自动生成无参数构造函数、指定参数的构造函数或包含所有参数的构造函数。
  • @Data: 是一个组合注解,相当于同时使用了@Getter@Setter@ToString@EqualsAndHashCode、@RequiredArgsConstructor注解。
  • @Slf4j: 自动生成日志记录器。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读——Prophet(cvpr2023)

一、Framework 这个模型分为两阶段&#xff1a;一是答案启发生成阶段&#xff08;answer heuristics generation stage&#xff09;&#xff0c;即在一个基于知识的VQA数据集上训练一个普通的VQA模型&#xff0c;产生两种类型的答案启发&#xff0c;答案候选列表和答案例子&am…

使用SpringBoot集成FastDFS

使用SpringBoot集成FastDFS 这篇文章我们介绍如何使用 Spring Boot 将文件上传到分布式文件系统 FastDFS 中。 1、FastDFS FastDFS是一个开源的轻量级分布式文件系统&#xff0c;它对文件进行管理&#xff0c;功能包括&#xff1a;文件存储、文件同步、文件访问 &#xff0…

vue2-006——使用脚手架搭建vue2项目+项目结构分析

一、创建项目&#xff1a;vue create 项目名 D:\EnyiWang\Documents\myStudy\vue>vue create vue_testVue CLI v5.0.8 ? Please pick a preset: Default ([Vue 2] babel, eslint)Vue CLI v5.0.8 ✨ Creating project in D:\EnyiWang\Documents\myStudy\vue\vue_test. &am…

设计测试用例的具体方法总结

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️白马沉河共歃誓&#xff0c;怒涛没城亦不悔 ☁️基于需求进行测试用例的设计 基…

[环境配置]vscode免密ssh的设置流程

测试环境&#xff1a; windows 11 ubuntu16.04 vmware 第一步&#xff1a;生成密钥 cmd打开输入&#xff1a;ssh-keygen -t rsa 一路回车后可以在C:\Users\用户名\.ssh路径看到id_rsa.pub&#xff0c;我们打开这个文件&#xff0c;用记事本打开即可&#xff0c;然后复制里…

“不得了·放飞杯” 2023年四川省健身健美锦标赛启动在成都隆重召开

“不得了放飞杯” 2023年四川省健身健美锦标赛启动在成都隆重召开 为了更好地推动四川省健身健美运动的普及和发展&#xff0c;结合《四川全民健身实施计划》的现状&#xff0c;适应新时代健身私教服务产业的发展需求&#xff0c;由中国健美协会指导&#xff0c;四川省健美健美…

BUUCTF [MRCTF2020]Ez_bypass 1

题目环境&#xff1a;F12查看源代码 I put something in F12 for you include flag.php; $flagMRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}; if(isset($_GET[gg])&&isset($_GET[id])) { $id$_GET[id]; $gg$_GET[gg]; if (md5($id) md5($gg) && $id ! $gg) { …

鸿蒙 ark ui 网络请求 我不允许你不会

前言&#xff1a; 最近有在学习这个鸿蒙的ark ui开发 因为鸿蒙不是发布了一个鸿蒙next的测试版本 明年会启动纯血鸿蒙应用 所以我就想提前给大家写一些博客文章 效果图 11-24 16:26:22.005 25156-25156/com.example.httpsrequest E A0ff00/HTTPS: 请求状态 --> 200, %{pub…

串口虚拟化工具

串口虚拟工具(Configure Virtual Serial Port Driver v7.2) 可以虚拟化串口 串口成对添加&#xff0c;添加之后可以在设备管理器中查看 链接&#xff1a;https://pan.baidu.com/s/1WE9c28MEoSEY7fGhy4kjag 提取码&#xff1a;yahn DebugTool-v.16 作用&#xff1a;可以检验…

区块链技术将如何影响未来的数字营销?

你是否听腻了区块链和数字营销等流行语&#xff0c;却不明白它们对未来意味着什么&#xff1f;那么&#xff0c;准备好系好安全带吧&#xff0c;因为区块链技术将彻底改变我们对数字营销的看法。从建立消费者信任到提高透明度和效率&#xff0c;其可能性是无限的。 让我们来探…

加速 Selenium 测试执行最佳实践

Selenium测试自动化的主要目的是加快测试过程。在大多数情况下&#xff0c;使用 Selenium 的自动化测试比手动测试执行得特别好。在实际自动化测试实践中&#xff0c;我们有很多方式可以加速Selenium用例的执行。 我们可以选择使用不同类型的等待、不同类型的 Web 定位器、不同…

[Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具

一.Docker Swarm集群raft算法讲解 Raft &#xff1a;一致性算法&#xff0c;在保证大多数管理节点存活的情况下&#xff0c;集群才能使用&#xff0c; 所以就要求如果集群的话&#xff0c; manager 节点必须 >3 台 &#xff0c;如果是两个台&#xff0c;其中一台宕机&#…

彩纸屋在线少儿编程源码/scratch在线编程系统/培训管理系统源码/在线培训系统源码PHP

源码简介&#xff1a; 彩纸屋在线少儿编程源码&#xff0c;它是scratch在线编程系统&#xff0c;作为培训管理系统源码/在线培训系统源码&#xff0c;采用PHP源码。 彩纸屋是全国首家提供scratch开源定制和少儿编程培训管理系统源代码的服务商&#xff0c;彩纸屋提供的scratc…

一条Update语句的执行过程是怎样的?

先看第一个问题&#xff0c;这里做个简单描述 &#xff0c;因为我们着重还是看Update MySQL执行一条Select语句是怎么运行的&#xff1f; 这个问题大家在面试的时候大家都背过类似的题&#xff0c;而且网上也有很多答案&#xff0c;这里分享一个大致流程介绍&#xff0c;关于…

工业级 S25HS01GTDPBHV030 NOR闪存,L9305EP汽车级驱动器IC,LMK03318RHSR时钟发生器,PLL(中文资料)

一、工业级 S25HS01GTDPBHV030 Semper™ NOR闪存 S25HS01GT SEMPER™ NOR Flash闪存系列是英飞凌高性能、安全而可靠的 NOR Flash解决方案。 它集成了适用于汽车、工业、通信等广泛应用的关键安全功能。 凭借 SEMPER™ NOR Flash闪存&#xff0c;英飞凌推出了业界首款符合 ASI…

多线程04 线程安全问题以及一些简单的解决策略

前言 首先我们引入多线程是为了解决多次创建进程和销毁进程带来的巨大开销,线程可以共享内存和硬盘资源等等,这里我们就会想,他们共享这些东西会不会涉及到一些安全问题呢?他们没有独立分配自己的资源是一定会有安全问题的,但是就目前在这个快节奏的社会来说,效率的提升是必然…

Python编程之魂之运算符的优先级教程

文章目录 前言优先级概述相同优先级结合性运算符优先级一览表运算符优先级重点说明结语关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资…

深度学习基于Python+TensorFlow+Django的水果识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介技术组合系统功能使用流程 二、功能三、系统四. 总结 一项目简介 # 深度学习基于PythonTensorFlowDjango的水果识别系统介绍 简介 该水果识别系统基于…

PaddleOCR学习笔记

Paddle 功能特性 PP-OCR系列模型列表 https://github.com/PaddlePaddle/PaddleOCR#%EF%B8%8F-pp-ocr%E7%B3%BB%E5%88%97%E6%A8%A1%E5%9E%8B%E5%88%97%E8%A1%A8%E6%9B%B4%E6%96%B0%E4%B8%AD PP-OCR系列模型列表&#xff08;V4&#xff0c;2023年8月1日更新&#xff09; 配置文…

【论文解读】Edit-DiffNeRF:使用2D-扩散模型编辑3D-NeRF

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2306.09551 摘要 最近的研究表明&#xff0c;将预训练的扩散模型与神经辐射场&#xff08;NeRF&#xff09;相结合&#xff0c;是一种很有前途的文本到 3D 的生成…