Lombok注解常用场景

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)会生成额外代码,需注意序列化 / 反序列化兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值