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

自动生成类的 equals 和 hashCode 方法。可以通过 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进阶------数组超详细整理 → |

相关推荐
AI_Lab015 分钟前
宝塔用了两年,有没有必要换成轻量方案?
linux·运维·服务器
by209997 分钟前
Linux GDB 调试与 CGDB 使用
linux·运维·服务器·经验分享
小羊没烦恼!9 分钟前
关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁
java·服务器·网络·学习·负载均衡
小Ti客栈16 分钟前
Netty 零拷贝原理与实战
运维·服务器·网络
SDWAN_Cheap1 小时前
物理服务器跟云服务器有什么区别,使用于什么场景
运维·服务器
Smoothcloud润云1 小时前
GPU算力平台推荐:复现实验时,如何判断租用资源是否合适?
服务器·人工智能·深度学习·gpu算力·gpu
Fuyo_11191 小时前
C++ AVL树保姆级详解:从平衡因子到四大旋转机制
java·c++·算法
锋行天下1 小时前
DeepSeek写Langgraph就是个大傻逼,一本正经胡说八道
前端·人工智能·后端
Sarvartha2 小时前
Date、LocalDate、LocalTime、LocalDateTime、DateTimeFormatter类
java
jktantan2 小时前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript