【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 后无需在方法签名中声明或在方法内部进行显式的异常处理。在实际应用中,谨慎使用此注解,以确保异常能够得到适当处理。

相关推荐
wangsir.5 小时前
测试之自动化测试常用函数
python·测试
Hx_Ma165 小时前
SpringBoot数据源自动管理
java·spring boot·spring
微小冷5 小时前
Rust异步编程详解
开发语言·rust·async·await·异步编程·tokio
SunnyDays10115 小时前
Java 高效实现 CSV 转 Excel
java·csv转excel
starfire_hit5 小时前
JAVAWEB根据前台请求获取用户IP
java·服务器·网络
铁蛋AI编程实战5 小时前
MemoryLake 实战:构建超长对话 AI 助手的完整代码教程
人工智能·python·microsoft·机器学习
fengxin_rou5 小时前
[Redis从零到精通|第四篇]:缓存穿透、雪崩、击穿
java·redis·缓存·mybatis·idea·多线程
A9better5 小时前
C++——不一样的I/O工具与名称空间
开发语言·c++·学习
像少年啦飞驰点、5 小时前
从零开始学 RabbitMQ:小白也能懂的消息队列实战指南
java·spring boot·微服务·消息队列·rabbitmq·异步编程
清水白石0085 小时前
《为什么说 deque 是 Python 滑动窗口的“隐藏神器”?深入解析双端队列的高效之道》
开发语言·python