【Lombok库常用注解】

Lombok是一个Java库,它通过注解的方式,在编译期自动生成样板代码,极大地减少了Java开发中冗长且重复的代码,如getter、setter、构造函数等,使代码更加简洁易读。以下是一些Lombok常用的注解及其作用:

1. @Getter@Setter

  • 作用 :自动为类的字段生成Getter和Setter方法。@Getter 生成获取字段值的方法,@Setter 生成设置字段值的方法。这两个注解可以用于类级别或字段级别。
  • 示例
java 复制代码
import lombok.Getter;
import lombok.Setter;

public class Person {
    @Getter @Setter
    private String name;
    @Getter
    private int age;
}

在上述代码中,name 字段会生成 getName()setName(String name) 方法,age 字段会生成 getAge() 方法。

2. @ToString

  • 作用 :自动生成 toString() 方法,该方法返回一个包含类名以及所有字段值的字符串,方便调试和日志记录。
  • 示例
java 复制代码
import lombok.ToString;

@ToString
public class Book {
    private String title;
    private String author;
}

生成的 toString() 方法大致如下:

java 复制代码
@Override
public String toString() {
    return "Book{" +
            "title='" + title + '\'' +
            ", author='" + author + '\'' +
            '}';
}

3. @EqualsAndHashCode

  • 作用 :自动生成 equals(Object o)hashCode() 方法。equals 方法用于比较两个对象是否相等,hashCode 方法用于生成对象的哈希码,以便在哈希表等数据结构中使用。默认情况下,会根据类的所有非静态、非瞬态字段来生成这些方法。
  • 示例
java 复制代码
import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class Employee {
    private String id;
    private String name;
}

生成的 equals 方法会比较两个 Employee 对象的 idname 字段是否相等,hashCode 方法会基于这两个字段生成哈希码。

4. @NoArgsConstructor@RequiredArgsConstructor@AllArgsConstructor

  • @NoArgsConstructor:生成一个无参数的构造函数。
  • @RequiredArgsConstructor :为类生成一个包含所有带有 final 修饰符或 @NonNull 注解字段的构造函数。
  • @AllArgsConstructor:生成一个包含类中所有字段的构造函数。
  • 示例
java 复制代码
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;

public class Product {
    @NonNull
    private String name;
    private double price;
    private int quantity;

    @NoArgsConstructor
    public Product() {}

    @RequiredArgsConstructor
    public Product(@NonNull String name) {
        this.name = name;
    }

    @AllArgsConstructor
    public Product(@NonNull String name, double price, int quantity) {
        this.name = name;
        this.price = price;
        this.quantity = quantity;
    }
}

5. @Data

  • 作用 :这是一个组合注解,相当于同时使用了 @Getter@Setter@ToString@EqualsAndHashCode@RequiredArgsConstructor。它为类提供了常用的访问器、相等性判断、字符串表示和构造函数等功能。
  • 示例
java 复制代码
import lombok.Data;

@Data
public class Student {
    private String studentId;
    private String studentName;
    private int grade;
}

使用 @Data 注解后,无需再单独添加上述其他注解,即可拥有对应的功能。

6. @Slf4j

  • 作用 :在类中自动生成一个名为 log 的日志记录器,方便进行日志记录。它会根据项目所使用的日志框架(如Logback、Log4j等)生成相应的日志记录器实例。
  • 示例
java 复制代码
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Application {
    public void doSomething() {
        log.info("Doing something...");
    }
}

在上述代码中,log 可以直接用于记录日志,无需手动初始化日志记录器。

7. @SneakyThrows

  • 作用:用于忽略被注解方法所抛出的已检查异常(Checked Exception),使代码无需显式地进行异常处理。它在某些情况下可以简化代码,但需谨慎使用,因为这可能会掩盖潜在的异常问题。
  • 示例
java 复制代码
import lombok.SneakyThrows;

public class FileReader {
    @SneakyThrows
    public String readFile(String filePath) {
        java.io.File file = new java.io.File(filePath);
        java.util.Scanner scanner = new java.util.Scanner(file);
        return scanner.nextLine();
    }
}

readFile 方法中,java.io.Filejava.util.Scanner 相关操作可能会抛出 FileNotFoundException 等已检查异常,但使用 @SneakyThrows 后无需在方法签名中声明或在方法内部进行显式的异常处理。在实际应用中,谨慎使用此注解,以确保异常能够得到适当处理。

相关推荐
欧米欧几秒前
C++算法之双指针算法
开发语言·c++
天天进步20154 分钟前
Python全栈项目实战:自建高效多媒体处理工具
开发语言·python
yaoxin5211235 分钟前
388. Java IO API - 处理事件
java·服务器·数据库
JAVA学习通5 分钟前
AI 工作流编排系统的任务拆分、重试与观测:2026年工程实践深度解析
java·人工智能·spring
zzzsde6 分钟前
【Linux】线程概念与控制(1)线程基础与分页式存储管理
linux·运维·服务器·开发语言·算法
waterHBO8 分钟前
python + fast-wahisper 读取麦克风,实现语音转录,而且是实时转录。
开发语言·python
reasonsummer11 分钟前
【教学类-160-09】20260417 AI视频培训-练习010“豆包AI视频《熊猫找朋友》+豆包图片风格:水墨画”
python·音视频·豆包视频
凤山老林11 分钟前
27-Java final 关键字
java·开发语言
少许极端11 分钟前
算法奇妙屋(四十九)-贡献法
java·算法·leetcode·贡献法
JaydenAI12 分钟前
[FastMCP设计、原理与应用-15]挂载一个MCP服务器就像挂载一个目录一样容易
python·ai编程·ai agent·mcp·fastmcp