Lombok超详解

本文介绍了Lombok库如何通过注解简化Java代码,包括@Setter、@Getter、@ToString、@EqualsAndHashCode等常见注解的使用方法,以及如何安装Lombok插件和在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、Lombok概述

二、Lombok插件安装

三、Lombok相关注解

3.1 @Setter和@Getter 

3.2 @ToString

3.3 @EqualsAndHashCode,@NonNull

3.4 @NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor

3.5 @Data

3.6 @Builder

3.7 @Log

3.8 @CleanUp

3.9 @SneakyThrows


一、Lombok概述

        以前的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> 

3.1 @Setter和@Getter 

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

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

//给类下的所有属性添加Setter/Getter
@Setter
@Getter
public class User {
  //给id属性添加Setter
  @Setter
  private 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方法 

3.2 @ToString

作用:生成toString方法,默认情况下它会按顺序打印类名称以及每个字段。
位置:类上方
属性:exclude:取消某一个或多个变量在toString方法中的显示

经过测试确实没有显示 

3.3 @EqualsAndHashCode,@NonNull

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

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

而在Set中判断对象是否重复,在调用equals()之前,需要先调用hashCode()计算hash值。所以判断对象相等需要重写equals()、canEqual()、hashCode()三个方法。
@EqualsAndHashCode
作用:生成equals和hashCode、canEqual方法。用于比较两个类对象是否相同。
位置:类上方
属性:exclude: 比较时排除一些属性,of: 比较时只使用一些属性

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@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。
位置:方法参数前或属性上方。 

3.4 @NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor

@NoArgsConstructor

作用:生成无参构造方法
位置:类上方
@RequiredArgsConstructor
作用:生成包含final和@NonNull修饰的属性的构造方法
位置:类上方
@AllArgsConstructor
作用:生成全参的构造方法
位置:类上方

3.5 @Data

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

3.6 @Builder

作用:提供链式风格创建对象
位置:类上方

示例代码:

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

3.7 @Log

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

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

3.8 @CleanUp

作用:自动关闭资源,如IO流对象。
位置:代码前方

3.9 @SneakyThrows

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

### 回答1: 在 TURBO C 2.0 中,您可以使用 biosdisk() 函数来格式化软盘。 下面是一段代码示例: ``` #include <stdio.h> #include <dos.h> int main() { // 定义扇区的大小 unsigned int sector_size[3] = {512, 512, 1024}; // 定义填充字节 unsigned char fill_char[3] = {0xF6, 0xF6, 0x48}; // 格式化磁道 70 面 0 的前三个扇区 for (int i = 0; i < 3; i++) { int result = biosdisk(2, 0, 70, 0, i + 1, 1, sector_size[i], fill_char[i]); if (result != 0) { printf("格式化扇区 %d 失败,返回码: %d\n", i + 1, result); } } return 0; } ``` 请注意,在使用 biosdisk() 函数之前,需要包含 dos.h 头文件。 希望这能帮到您! ### 回答2: 使用TURBO C 2.0语言,可以通过以下代码格式化软盘的70磁道0面,并分别格式化3个扇区,大小分别为512字节、512字节和1024字节。其中,前两个扇区使用F6填充,第三个扇区使用48填充。 ```c #include<stdlib.h> #include<stdio.h> #include<dos.h> void formatFloppyDisk(){ union REGS regs; regs.h.ah = 0x0;// To format a floppy disk, we set AH=0 regs.h.dl = 0;// Drive number (0=A, 1=B, etc.) regs.x.cx = 0;// Track number to format regs.h.dh = 0;// Head number regs.h.al = 0;// Sector size (0=default, 1=512 bytes, 2=1024 bytes, 3=2048 bytes etc.) int FILL_BYTE = 0;// The byte value to fill the sectors with during formatting int NUM_SECTORS = 3;// Number of sectors to format // To format 70th track 0th head regs.x.ax = 0x1301; // 0x13 = Reset disk system, 01H = Reset only specified drive int86(0x13, &regs, &regs); // BIOS interrupt to reset disk system for (int i=0; i<NUM_SECTORS; i++){ regs.x.ax = 0x3101; // 0x31 = Write Format, 01H = Format only current track regs.x.bx = 0x0001; // 0x00 = Drive A:, 01H = Head 1, 0 = Generate ID Field depending on the disk in the drive 1 = Keep the ID Field all zeros regs.x.cx = 0x0170; // Track number=70(0-79 range) regs.h.dh = 0x00; // Head number=0 or 1 regs.h.al = 0x02; // Control byte=always zero regs.x.dx = i+1; // Sector number starting from 1 regs.x.si = 0x0000; // segment and offset of read/write buffer regs.x.di = 0x0000; // segment and offset of result if(i == 2){ FILL_BYTE = 0x48; // Fill the third sector with 48 regs.x.ax = 0x3102; // 0x31 = Write Format, 02H = Format sequential tracks immediately following the one being formatted }else{ FILL_BYTE = 0xF6; // Fill the first two sectors with F6 } regs.h.ah = FILL_BYTE; // Fill the sector with specified byte int86(0x13, &regs, &regs); // BIOS interrupt to format the specified sector } } int main(){ formatFloppyDisk(); return 0; } ``` 上述代码使用了INT 0x13,即BIOS中断服务例程,来执行软盘格式化操作。通过设置寄存器的不同参数,可以指定要格式化的磁道、面、扇区大小和填充字节。在这个例子中,我们格式化了软盘70磁道0面的3个扇区,前两个扇区使用F6填充,第三个扇区使用48填充。
评论 134
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会洗碗的CV工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值