lombok使用教程

Lombok 是一个用于简化 Java 编程的库,它通过注解来自动生成样板代码,从而减少了手动编写样板代码的繁琐。


@Getter@Setter

自动为类中的字段生成 getter 和 setter 方法。

  • @Getter@Setter 不具有可选参数。它们的作用是生成 getter 和 setter 方法,默认生成所有字段的 getter 和 setter。

@ToString

自动生成 toString() 方法。

  • **includeFieldNames**:是否包括字段名。
    • 默认值false
    • 作用:设置为 true 时,生成的 toString() 方法会包含字段名,例如 "Person(name=John, age=30)"
  • **exclude**:排除某些字段。
    • 默认值:空数组
    • 作用:指定要排除在 toString() 方法中的字段。例如,@ToString(exclude = "age") 将排除 age 字段。
  • **callSuper**:是否调用父类的 toString() 方法。
    • 默认值false
    • 作用:设置为 true 时,会调用父类的 toString() 方法。如果父类的 toString() 方法有意义,这样做可能会更完整。

@EqualsAndHashCode

自动生成 equals()hashCode() 方法。

  • **exclude**:排除某些字段。
    • 默认值:空数组
    • 作用:指定在 equals()hashCode() 方法中排除的字段。例如,@EqualsAndHashCode(exclude = "age") 将排除 age 字段。
  • **callSuper**:是否调用父类的 equals()hashCode() 方法。
    • 默认值false
    • 作用:设置为 true 时,会调用父类的 equals()hashCode() 方法。如果父类的实现有意义,这样做可能会更完整。

@NoArgsConstructor, @AllArgsConstructor, 和 @RequiredArgsConstructor

自动生成构造函数

  • @NoArgsConstructor
    • **access**:构造函数的访问级别。
      • 默认值AccessLevel.PUBLIC
      • 作用:可以设置为 PRIVATEPROTECTEDPUBLIC,决定生成的构造函数的访问级别。
  • @AllArgsConstructor
    • **access**:构造函数的访问级别。
      • 默认值AccessLevel.PUBLIC
      • 作用:可以设置为 PRIVATEPROTECTEDPUBLIC,决定生成的构造函数的访问级别。
  • @RequiredArgsConstructor
    • **access**:构造函数的访问级别。
      • 默认值AccessLevel.PUBLIC
      • 作用:可以设置为 PRIVATEPROTECTEDPUBLIC,决定生成的构造函数的访问级别。

@Builder

简化 Builder 模式的实现。

  • **builderClassName**:生成的 Builder 类的名称。
    • 默认值"Builder"
    • 作用:可以指定自定义的 Builder 类名,例如 builderClassName = "CustomBuilder"
  • **builderMethodName**:生成的 Builder 方法名称。
    • 默认值"builder"
    • 作用:可以指定自定义的 Builder 方法名称,例如 builderMethodName = "create"
  • **buildMethodName**:生成的构建方法名称。
    • 默认值"build"
    • 作用:可以指定自定义的构建方法名称,例如 buildMethodName = "create"
  • **toBuilder**:生成 toBuilder() 方法,用于从现有对象创建一个 Builder。
    • 默认值false
    • 作用:设置为 true 时,会生成 toBuilder() 方法,允许从现有对象创建一个新的 Builder。

代码示例:

1
2
3
4
5
6
7
8
9
10
import lombok.Builder;
import lombok.ToString;

@Builder
@ToString
public class Person {
private String name;
private int age;
private String address;
}
1
2
3
4
5
6
7
8
9
10
11
public class Main {
public static void main(String[] args) {
Person person = Person.builder()
.name("John Doe")
.age(30)
.address("123 Elm Street")
.build();
System.out.println(person);
}
}


@Data

组合了 @Getter, @Setter, @ToString, @EqualsAndHashCode, 和 @RequiredArgsConstructor 注解,适用于需要所有这些功能的场景。

  • @Data 注解没有独立的可选参数。它是组合注解,包含 @Getter@Setter@ToString@EqualsAndHashCode@RequiredArgsConstructor

@Value

主要用于不可变类,如枚举类等

  • @Value 注解没有独立的可选参数。它是不可变类的组合注解,包含 @Getter@ToString@EqualsAndHashCode 和一个构造函数,字段被设置为 final

@Singular

  • @Singular 注解没有独立的可选参数。它是用于在 Builder 模式中处理集合和映射字段的注解。
  • 简化 Builder 模式中集合和映射字段的处理。使用 @Singular 可以让你方便地在构建对象时,逐个添加集合或映射的元素,而不需要一次性提供完整的集合或映射。
  1. 对集合字段:生成用于添加单个元素的方法,而不是一次性传递整个集合。
  2. 对映射字段:生成用于添加单个键值对的方法,而不是一次性传递整个映射。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import lombok.Builder;
import lombok.ToString;
import lombok.Singular;
import java.util.List;

@Builder
@ToString
public class Person {
private String name;
private int age;

@Singular
private List<String> hobbies;
}

1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
public static void main(String[] args) {
Person person = Person.builder()
.name("John Doe")
.age(30)
.hobby("Reading")
.hobby("Swimming")
.build();
System.out.println(person);
}
}


@Slf4j, @Log4j2, @Log, @CommonsLog

自动生成日志记录器。

  • @Slf4j, @Log4j2, @Log, @CommonsLog 注解没有独立的可选参数。它们用于自动生成不同类型的日志记录器。

@SneakyThrows

  • @SneakyThrows 注解没有独立的可选参数。它用于在方法中处理受检异常,无需显式声明或捕获异常。

@NonNull

  • @NonNull 注解没有独立的可选参数。它用于标记字段和方法参数为不允许 null,在构造函数中自动插入 null 检查。