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

相关推荐
独好紫罗兰5 分钟前
对python的再认识-基于数据结构进行-a004-列表-实用事务
开发语言·数据结构·python
gjxDaniel6 分钟前
Objective-C编程语言入门与常见问题
开发语言·objective-c
ZH15455891318 分钟前
Flutter for OpenHarmony Python学习助手实战:模块与包管理的实现
python·学习·flutter
山岚的运维笔记11 分钟前
SQL Server笔记 -- 第20章:TRY/CATCH
java·数据库·笔记·sql·microsoft·sqlserver
choke23317 分钟前
[特殊字符] Python异常处理
开发语言·python
云中飞鸿17 分钟前
linux中qt安装
开发语言·qt
少控科技31 分钟前
QT第6个程序 - 网页内容摘取
开发语言·qt
darkb1rd32 分钟前
八、PHP SAPI与运行环境差异
开发语言·网络安全·php·webshell
南极企鹅33 分钟前
springBoot项目有几个端口
java·spring boot·后端
历程里程碑34 分钟前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法