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 插件一起食用

注解介绍
@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
这个注解可以自动生成类的 equals 和 hashCode 方法。
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 代码的编写,减少了样板代码,提高了代码的可读性和维护性。