摘要:本文介绍了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()方法
- 无参构造器
示例:
java1 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()方法。
示例:
java1 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()方法。
示例:
java1 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()方法。
示例:
java1 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比较父类字段。
示例:
java1 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注解字段的构造器。
示例:
java1 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注解用于生成无参构造器,需要在类上使用。
示例:
java1 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注解用于生成全参构造器,需要在类上使用。
示例:
java1 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注解用于创建建造者模式,方便对象的构建。
示例:
java1 2 3 4 5 6 7 8
| @Data @Builder public class User { private Integer id; private String name; private Integer age; private String email; }
|
使用:
java1 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注解用于生成日志记录器。
示例:
java1 2 3 4 5 6 7
| @Slf4j public class UserService { public void findById(Integer id) { log.info("根据ID查询用户,ID = {}", id); } }
|
3.3 @NonNull
@NonNull注解用于标记不能为空的字段,会在构造时进行检查,如果为空会抛出异常。
示例:
java1 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; } }
|
使用:
java1 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代码块。
示例:
java1 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关键字更安全。
条