Java进阶——Lombok的使用

Lombok可以通过注解的方式,在编译时自动生成 getter、setter、构造函数、toString 等样板代码,从而减少代码的冗余,提高开发效率。本文深入讲解Lombok在实际开发中的使用。

本文目录

      • [1. Lombok 依赖添加](#1. Lombok 依赖添加)
      • [2. 常用Lombok注解及使用场景](#2. 常用Lombok注解及使用场景)
        • [2.1 @Getter 和 @Setter](#2.1 @Getter 和 @Setter)
        • [2.2 @ToString](#2.2 @ToString)
        • [2.3 @EqualsAndHashCode](#2.3 @EqualsAndHashCode)
        • [2.4 @NoArgsConstructor、@RequiredArgsConstructor和 @AllArgsConstructor](#2.4 @NoArgsConstructor、@RequiredArgsConstructor和 @AllArgsConstructor)
        • [2.5 @Data](#2.5 @Data)
        • [2.6 @Builder](#2.6 @Builder)

1. Lombok 依赖添加

xml 复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.26</version>
    <scope>provided</scope>
</dependency>

2. 常用Lombok注解及使用场景

2.1 @Getter 和 @Setter

自动生成类中所有属性的 getter 和 setter 方法。可以用在类上,为所有属性生成;也可以用在单个属性上,只为该属性生成。

java 复制代码
import lombok.Getter;
import lombok.Setter;


@Getter
@Setter
public class Product {
    private String productId;
    private String productName;
    private double price;
    private int stock;
}
2.2 @ToString

自动生成类的 toString 方法,方便打印对象的信息。可以通过 exclude 属性排除某些不需要显示的属性,通过 includeFieldNames 属性控制是否显示属性名。

java 复制代码
import lombok.ToString;

@ToString(exclude = "orderDetails")
public class Order {
    private String orderId;
    private String customerId;
    private java.util.List<OrderDetail> orderDetails;
}
2.3 @EqualsAndHashCode

自动生成类的 equalshashCode 方法。可以通过 exclude 属性排除某些不需要参与比较的属性。

java 复制代码
import lombok.EqualsAndHashCode;

@EqualsAndHashCode(exclude = "password")
public class User {
    private String userId;
    private String username;
    private String password;
}
2.4 @NoArgsConstructor、@RequiredArgsConstructor和 @AllArgsConstructor
  • @NoArgsConstructor:生成无参构造函数。
  • @RequiredArgsConstructor :为类中所有被 final 修饰的属性和被 @NonNull 注解的属性生成构造函数。
  • @AllArgsConstructor:生成包含所有属性的构造函数。
java 复制代码
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;


@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsConstructor
public class ProductCategory {
    private String categoryId;
    private final String categoryName;
    private String description;
}
2.5 @Data

@Getter@Setter@ToString@EqualsAndHashCode@RequiredArgsConstructor 的组合注解,一次性为类生成常用的方法。

java 复制代码
import lombok.Data;


@Data
public class CartItem {
    private String cartItemId;
    private String productId;
    private int quantity;
}
2.6 @Builder

为类生成建造者模式的代码,通过链式调用的方式方便地创建对象。

java 复制代码
import lombok.Builder;

// 优惠券实体类
@Builder
public class Coupon {
    private String couponId;
    private String couponName;
    private double discount;
    private java.util.Date expirationDate;
}

// 使用建造者模式创建对象
Coupon coupon = Coupon.builder()
        .couponId("123")
        .couponName("满减优惠券")
        .discount(10.0)
        .expirationDate(new java.util.Date())
        .build();

|-----------------------------------------------------------------------------------------------------|--------------------|--------------------------------------------------------------------------------------------------|
| ← 上一篇 Java进阶------常用类及常用方法详解 | 记得点赞、关注、收藏哦! | 下一篇 Java进阶------数组超详细整理 → |

相关推荐
都叫我大帅哥1 分钟前
当Java遇上函数式编程:从“面条代码”到“代码诗人”的进化指南
java
心.c4 分钟前
React基础
前端·javascript·react.js
都叫我大帅哥6 分钟前
Spring Batch中的JobRepository:批处理的“记忆大师”是如何工作的?🧠
java·spring
江城开朗的豌豆15 分钟前
Vue新手必看!1分钟快速创建项目的魔法命令
前端·javascript·vue.js
三好码农15 分钟前
深入Android 15 Zygote:ZygoteServer如何驾驭进程孵化
java·设计模式·架构
黑客笔记29 分钟前
Bugku-CTF-web
大数据·前端·深度学习·web安全
恋猫de小郭1 小时前
Compose Hot Reload 为什么只支持桌面 JVM,它和 Live Edit 又有什么区别?
android·前端·flutter
叶 落1 小时前
三种语言写 MCP
java·python·ai·typescript·mcp
10年前端老司机2 小时前
Vue3项目中使用vue-draggable-plus实现拖拽需求简直不要太丝滑
前端·javascript·vue.js
桃子是唯一的水果2 小时前
spring碎片
java·spring