Lombok注解及其用法

介绍

Lombok 是一个 Java 库,它通过注解来简化 Java 代码的编写,减少样板代码(boilerplate code),提高开发效率。

配置 Lombok

要在项目中使用 Lombok,需要在项目的构建工具(如 Maven 或 Gradle)中添加 Lombok 依赖。

Maven

1
2
3
4
5
6
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>

Gradle

1
2
3
4
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.24'
annotationProcessor 'org.projectlombok:lombok:1.18.24'
}

在IDEA中使用可以需要搭配 Lombok 插件一起食用

image-20240905123419416

注解介绍

@Getter@Setter

这两个注解可以自动生成类的 getter 和 setter 方法。

1
2
3
4
5
6
7
8
9
import lombok.Getter;
import lombok.Setter;

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

@ToString

这个注解可以自动生成类的 toString 方法。

1
2
3
4
5
6
7
import lombok.ToString;

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

@EqualsAndHashCode

这个注解可以自动生成类的 equalshashCode 方法。

1
2
3
4
5
6
7
import lombok.EqualsAndHashCode;

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

@NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor

这些注解可以自动生成类的构造方法。

1
2
3
4
5
6
7
8
9
10
11
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class User {
private String name;
private int age;
}

@Data

这个注解是一个组合注解,包含了 @ToString, @EqualsAndHashCode, @Getter, @Setter, 和 @RequiredArgsConstructor

1
2
3
4
5
6
7
import lombok.Data;

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

@Builder

这个注解可以为类生成一个 Builder 模式的 API。

1
2
3
4
5
6
7
import lombok.Builder;

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

@NonNull

这个注解可以用于字段或方法参数,生成非空检查。

1
2
3
4
5
6
7
8
9
10
11
import lombok.NonNull;

public class User {
private String name;
private int age;

public User(@NonNull String name, int age) {
this.name = name;
this.age = age;
}
}

@Cleanup

这个注解可以自动管理资源的关闭。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import lombok.Cleanup;
import java.io.*;

public class CleanupExample {
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}
}

@Value

这个注解用于创建不可变类。

1
2
3
4
5
6
7
import lombok.Value;

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

@SneakyThrows

这个注解可以用于方法,自动处理受检异常。

1
2
3
4
5
6
7
8
import lombok.SneakyThrows;

public class SneakyThrowsExample {
@SneakyThrows(UnsupportedEncodingException.class)
public String utf8ToString(byte[] bytes) {
return new String(bytes, "UTF-8");
}
}

总结

Lombok 通过注解大大简化了 Java 代码的编写,减少了样板代码,提高了代码的可读性和维护性。