抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文介绍了Lombok注解的使用方法。

环境

Windows 10 企业版 LTSC 21H2
Java 1.8
Maven 3.6.3
Lombok 1.18.30

1 基础注解

1.1 @Data

@Data注解是Lombok中最常用的注解之一,是多个注解的组合注解,需要在类上使用,它会自动生成以下方法:

  • getter()方法
  • setter()方法
  • toString()方法
  • equals()方法
  • hashCode()方法
  • 无参构造器

示例:

java
1
2
3
4
5
6
7
@Data
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
}

1.2 @Getter

@Getter注解属于@Data注解的一部分,需要在字段上使用,用于生成getter()方法。

示例:

java
1
2
3
4
5
6
7
8
9
10
public class User {
@Getter
private Integer id;
@Getter
private String name;
@Getter
private Integer age;
@Getter
private String email;
}

1.3 @Setter

@Setter注解属于@Data注解的一部分,需要在字段上使用,用于生成setter()方法。

示例:

java
1
2
3
4
5
6
7
8
9
10
public class User {
@Setter
private Integer id;
@Setter
private String name;
@Setter
private Integer age;
@Setter
private String email;
}

1.3 @ToString

@ToString注解属于@Data注解的一部分,需要在类上使用,用于生成toString()方法。

示例:

java
1
2
3
4
5
6
7
@ToString
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
}

1.4 @EqualsAndHashCode

@EqualsAndHashCode注解属于@Data注解的一部分,需要在类上使用,用于生成equals()方法和hashCode()方法。

默认仅比较当前类的字段,忽略父类的字段,可以设置callSuper = true比较父类字段。

示例:

java
1
2
3
4
5
6
7
@EqualsAndHashCode(callSuper = true)
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
}

2 构造注解

2.1 @RequiredArgsConstructor

@RequiredArgsConstructor注解属于@Data注解的一部分,需要在类上使用,用于生成包含final字段和@NonNull注解字段的构造器。

示例:

java
1
2
3
4
5
6
7
8
@RequiredArgsConstructor
public class User {
@NonNull
private Integer id;
private String name;
private Integer age;
private String email;
}

2.2 @NoArgsConstructor

@NoArgsConstructor注解用于生成无参构造器,需要在类上使用。

示例:

java
1
2
3
4
5
6
7
@NoArgsConstructor
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
}

2.3 @AllArgsConstructor

@AllArgsConstructor注解用于生成全参构造器,需要在类上使用。

示例:

java
1
2
3
4
5
6
7
@AllArgsConstructor
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
}

3 其他注解

3.1 @Builder

@Builder注解用于创建建造者模式,方便对象的构建。

示例:

java
1
2
3
4
5
6
7
8
@Data
@Builder
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
}

使用:

java
1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
User user = User.builder()
.id(1)
.name("张三")
.age(18)
.email("zhangsan@example.com")
.build();
System.out.println(user);
}

3.2 @Slf4j

@Slf4j注解用于生成日志记录器。

示例:

java
1
2
3
4
5
6
7
@Slf4j
public class UserService {
public void findById(Integer id) {
log.info("根据ID查询用户,ID = {}", id);
// 业务逻辑
}
}

3.3 @NonNull

@NonNull注解用于标记不能为空的字段,会在构造时进行检查,如果为空会抛出异常。

示例:

java
1
2
3
4
5
6
7
8
9
10
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
public User(@NonNull Integer id, String name) {
this.id = id;
this.name = name;
}
}

使用:

java
1
2
3
4
public static void main(String[] args) {
User user = new User(null, "张三");// 抛出空指针异常
System.out.println(user);
}

3.4 @Cleanup

@Cleanup注解用于自动关闭资源,相当于try-with-resources代码块。

示例:

java
1
2
3
4
5
6
7
8
9
public void test(String source, String target) throws IOException {
@Cleanup FileInputStream fis = new FileInputStream(source);
@Cleanup FileOutputStream fos = new FileOutputStream(target);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
}

3.5 @Synchronized

@Synchronized注解用于创建同步方法,比synchronized关键字更安全。

评论