1.POJO/实体类优化
Lombok的@Data注解组合了@Getter、@Setter、@ToString、@EqualsAndHashCode(生成 equals() 和 hashCode() 方法)和@RequiredArgsConstructor(生成「必要参数」的构造器),适用于大多数实体类场景。示例:
@Data
public class User {
private Long id;
private String name;
private Integer age;
}
2.精细化控制
@Getter/@Setter可单独应用于字段或类(可加在类或字段上,类上则为所有字段生成)。
public class User {
@Getter @Setter private Long id;
private String name; // 不加注解则不生成
}
@NoArgsConstructor生成无参构造器,@AllArgsConstructor生成全参构造器。@RequiredArgsConstructor:为 final 或 @NonNull 修饰的字段生成构造器(适合依赖注入场景)。
3.空指针防护-
在方法参数或字段上添加 @NonNull,Lombok 会自动生成空指针校验代码。
public class UserService {
public void updateName(@NonNull String newName) {
// 自动生成:if (newName == null) throw new NullPointerException("newName is marked non-null but is null");
System.out.println(newName);
}
}
4.日志简化
替代手动创建日志对象
(如 private static final Logger log = LoggerFactory.getLogger(xxx.class);)。
常用注解:@Slf4j(对应 SLF4J)、@Log4j2(对应 Log4j2)、@CommonsLog(对应 Apache Commons Log)等。
@Slf4j
public class OrderService {
public void createOrder() {
log.info("订单创建成功"); // 直接使用 log 对象
}
}
5.构建者模式
快速实现建造者模式,方便链式调用创建对象(尤其适合字段多的场景)。
@Data
@Builder
public class Order {
private Long id;
private String productName;
private BigDecimal price;
}
// 使用方式
Order order = Order.builder().id(1L).productName("手机").price(new BigDecimal("5999")).build();
6.链式调用
@Accessors(chain = true)使setter方法返回当前对象:
@Data
@Accessors(chain = true)
public class User {
private Long id;
private String name;
}
// 使用:
User user = new User();
user.setId(1L).setName("张三"); // 链式调用
6. 静态内部类构建者(@SuperBuilder)
解决父子类继承场景下的构建者问题(@Builder 不支持继承,@SuperBuilder 可兼容父类字段)
@Data
@SuperBuilder
public class Parent {
private Long id;
}
@Data
@SuperBuilder
public class Child extends Parent {
private String name;
}
// 使用:
Child child = Child.builder().id(1L).name("子对象").build();
7. 自动关闭资源(@Cleanup)
替代 try-finally 手动关闭资源(如 IO 流),自动在代码块结束时调用 close() 方法。
public void readFile() throws IOException {
@Cleanup FileInputStream fis = new FileInputStream("test.txt");
@Cleanup BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
注意事项:
- 需在 IDE 中安装 Lombok 插件(否则可能报编译错误)。
- 避免过度使用
@Data(其包含@EqualsAndHashCode可能导致父子类 equals 逻辑异常,可手动排除字段:@EqualsAndHashCode(exclude = "xxx"))。 - 部分注解(如
@Builder)会生成额外代码,需注意序列化 / 反序列化兼容性。
218

被折叠的 条评论
为什么被折叠?



