【精选】Lombok概述及常用注解使用方法

news/2025/1/21 10:45:30/

Lombok概述

在这里插入图片描述

Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写getter、setter或equals方法,只要有一个注解,就有一个功能齐全的构建器、自动记录变量等等。

以前的Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString/构造方法;打印日志;I/O流的关闭操作等等,这些代码既没有技术含量,又影响着代码的美观,Lombok应运而生。

LomBok可以通过注解,帮助开发人员消除JAVA中尤其是POJO类中的冗长代码。

  • 使用LomBok之前

在这里插入图片描述

  • 使用LomBok之后

在这里插入图片描述

Lombok插件安装

在这里插入图片描述

如果IDEA版本在2020.3以上,不需要安装Lombok插件。如果IDEA版本在2020.3以下,需要安装Lombok插件,安装方法如下:

  1. 点击Flie->Setting->Plugins

  2. 搜索Lombok,安装

Lombok依赖

  • 普通maven项目Lombok依赖为:

    <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version><scope>provided</scope>
    </dependency>
    
  • SpringBoot项目Lombok的引入方式为:

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

Lombok注解

在这里插入图片描述

@Setter、@Getter

作用:为类中的属性提供setter/getter方法

位置:类上方或属性上方,在属性上方则为属性生成setter/getter方法,在类上方表示给该类下的所有属性生成setter/getter方法

属性:设置setter和getter访问权限

//给类下的所有属性添加Setter/Getter
@Setter
@Getter
public class User {//给id属性添加Setter@Setterprivate Integer id;//给username的setter方法设置私有权限@Setter(AccessLevel.PRIVATE)private String username;//取消password的Getter方法@Getter(AccessLevel.NONE)private String password;private static int age;private final String address = null;
}

注:

  • static修饰的变量不生成getter和setter方法
  • final修饰的变量只生成getter方法

在IDEA中,按住Alt+7可以查看Lombok生成的代码

@ToString

作用:生成toString方法,默认情况下它会按顺序打印类名称以及每个字段。

位置:类上方

属性:

  • exclude:取消某一个或多个变量在toString方法中的显示
@Setter
@Getter
//给User2设置一个toString方法,该方法不会显示password的值
@ToString(exclude = {"password"})
public class User2 {private Integer id;private String username;private String password;
}

@EqualsAndHashCode

判断两个对象是否相等

在Java中,调用equals()可以判断两个对象是否相等。如果类不重写该方法,则判断两个引用是否指向同一个对象。

如何重写equals():

  1. 判断两个引用是否指向同一对象
  2. 判断引用是否为Null
  3. 判断两个对象的实际类型是否相等,此时需要调用canEqual()
  4. 判断两个对象的属性是否相等

而在Set中判断对象是否重复,在调用equals()之前,需要先调用hashCode()计算hash值。所以判断对象相等需要重写equals()、canEqual()、hashCode()三个方法。

@EqualsAndHashCode

作用:生成equals和hashCode、canEqual方法。用于比较两个类对象是否相同。

位置:类上方

属性:

  • exclude: 比较时排除一些属性
  • of: 比较时只使用一些属性
@Setter
@Getter
@ToString
//@EqualsAndHashCode(exclude = {"password"})
//排除password,只使用id,username对比及计算hash
@EqualsAndHashCode(of = {"username"})
//只使用username对比及计算hash
public class User3 {private Integer id;private String username;private String password;
}

注意:

  • 对比时只使用非静态属性
  • 默认仅使用该类定义的属性不比较父类定义的属性

@NonNull

作用:用于方法参数前,表示调用该方法时参数不能为null;用于属性上方,表示为该属性赋值时值不能为null。

位置:方法参数前或属性上方。

@Setter
@Getter
public class User4 {// 调用构造方法或setter给id赋值时,值不能为null@NonNullprivate Integer id;private String username;private String password;// 调用sleep方法时,time参数不能为nullpublic void sleep(@NonNull Integer time){System.out.println("睡觉");}
}// 测试
@SpringBootTest
public class UserTest {@Testpublic void testUser() {User4 user = new User4();user.setId(null);user.sleep(null);}
}

@NoArgsConstructor

作用:生成无参构造方法

位置:类上方

@RequiredArgsConstructor

作用:生成包含final和==@NonNull==修饰的属性的构造方法

位置:类上方

@AllArgsConstructor

作用:生成全参的构造方法

位置:类上方

@Setter
@Getter
//@NoArgsConstructor // 给类提供无参构造方法
@RequiredArgsConstructor // 生成两个username和sex参数的构造方法
@AllArgsConstructor//提供全参构造方法
public class User5 {@NonNullprivate Integer id;private String username;private String password;private final String sex;
}

@Data

作用:相当于同时添加@Setter、@Getter、@ToString、@EqualsAndHashCode、 @RequiredArgsConstructor五个注解

位置:类上方

@Builder

作用:提供链式风格创建对象

位置:类上方

// 同时提供@Setter、@Getter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor
@Data
// 提供链式风格创建对象
@Builder
public class User6 {@NonNullprivate Integer id;private String username;private String password;
}// 测试
@Test
public void testUser() {User6 user6 = User6.builder().id(1).username("lombok").password("lombok").build();
}

@Log

作用:在类中生成日志对象,在方法中可以直接使用

位置:类上方

@Data
@Log4j2
public class User7 {private Integer id;private String username;private String password;public void sleep(){log.info("调用睡觉方法");System.out.println("睡觉");}
}

注:针对不同的日志实现产品,有不同的日志注解,使用@Log表示使用Java自带的日志功能,除了@Log,还可以使用@Log4j@Log4j2@Slf4j等注解,来使用不同的日志产品。

@Cleanup

作用:自动关闭资源,如IO流对象。

位置:代码前方

@SneakyThrows

作用:对方法中异常进行捕捉并抛出

位置:方法上方

@SneakyThrows
public void read() {@Cleanup FileInputStream fis = new FileInputStream("");
}
文章来源:https://blog.csdn.net/guojiaqi_/article/details/135122031
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/1276834.html

相关文章

【控制器局域网】CAN报文学习笔记(一)之 字节排序

在线进制转换 前言 在通信和计算机系统中&#xff0c;字节排序是指多字节数据在存储或传输过程中的排列顺序。Motorola Forward MSB&#xff08;Most Significant Byte&#xff09;和Motorola Forward LSB&#xff08;Least Significant Byte&#xff09;是两种不同的字节排序…

《数据结构、算法与应用C++语言描述》- 最小输者树模板的C++实现

输者树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_31loserTree 输者树&#xff1a;每一个内部节点所记录的都是比赛的输者&#xff0c;晋级的节点记录在边上。本文中&#xff0c;赢者是分数较低的那个&#xff0c;输者是分数高…

VScode安装C/C++编译器步骤

一、安装C/C插件 二、安装 MinGW-w64 工具链 使用国内源 git clone https://gitee.com/cuihongxi/ubuntu2-mac.git 下载后进入到VScode文件夹下&#xff0c;点击msys2-x86_64-20231026.exe进行安装 完成后&#xff0c;确保选中“立即运行 MSYS2”框&#xff0c;然后选择“完…

数据结构学习 leetcode64最小路径和

动态规划 题目&#xff1a; 建议看这里&#xff0c;有这道题详细的解析。我觉得写的挺好。 这是我在学动态规划的时候&#xff0c;动手做的一道题。 虽然我在学动态规划&#xff0c;但是我之前学了dps&#xff0c;所以我就想先用dps试着做&#xff0c;结果发现不行&#xf…

电商API接口之拼多多商品详情根据商品ID获取拼多多商品详情页数据SKU价格等

拼多多根据ID取商品详情 API 返回值说明 item_get-根据ID取商品详情 pinduoduo.item_get 公共参数 请求地址:申请调用KEY地址 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&am…

【分享】如何给Excel加密?码住这三种方法!

想要给Excel文件进行加密&#xff0c;方法有很多&#xff0c;今天分享三种Excel加密方法给大家。 打开密码 设置了打开密码的excel文件&#xff0c;打开文件就会提示输入密码才能打开excel文件&#xff0c;只有输入了正确的密码才能打开并且编辑文件&#xff0c;如果密码错误…

HTML输出特殊字符详细方法

以下是部分特殊字符代码表&#xff0c;它们的完整应用代码格式为&#xff1a;&#;用下面的四位数字替换&#xff0c;将得到对应的符号。&#xff08;注意&#xff1a;应用这些代码&#xff0c;编辑器应该切换到HTML模式&#xff09; ☏260f ☎260e ☺263a ☻263b ☼263c ☽…

[RK-Linux] 从主线U-Boot移植PCIe及其PHY驱动到RK3399 U-Boot

rk3399 u-boot 并没有支持 pcie 及其 phy 驱动,但是上游代码有支持。这里通过从上游 v2024.01-rc3 分支移植这部分驱动到 rk u-boot。 通过 rk3399.dtsi 知道 pci 匹配项为 rockchip,rk3399-pcie: pcie0: pcie@f8000000 {compatible = "rockchip,rk3399-pcie";..…