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

相关推荐
雨中飘荡的记忆1 小时前
ElasticJob分布式调度从入门到实战
java·后端
花酒锄作田3 小时前
使用 pkgutil 实现动态插件系统
python
前端付豪6 小时前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
曲幽7 小时前
FastAPI实战:打造本地文生图接口,ollama+diffusers让AI绘画更听话
python·fastapi·web·cors·diffusers·lcm·ollama·dreamshaper8·txt2img
老赵全栈实战7 小时前
Pydantic配置管理最佳实践(一)
python
考虑考虑10 小时前
JDK25模块导入声明
java·后端·java ee
_小马快跑_11 小时前
Java 的 8 大基本数据类型:为何是不可或缺的设计?
java
阿尔的代码屋13 小时前
[大模型实战 07] 基于 LlamaIndex ReAct 框架手搓全自动博客监控 Agent
人工智能·python
Re_zero14 小时前
线上日志被清空?这段仅10行的 IO 代码里竟然藏着3个毒瘤
java·后端
洋洋技术笔记14 小时前
Spring Boot条件注解详解
java·spring boot