【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 小时前
Python实现打包贪吃蛇游戏
开发语言·python·游戏
身如柳絮随风扬2 小时前
Java中的CAS机制详解
java·开发语言
0思必得03 小时前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
韩立学长3 小时前
【开题答辩实录分享】以《基于Python的大学超市仓储信息管理系统的设计与实现》为例进行选题答辩实录分享
开发语言·python
qq_192779873 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
风筝在晴天搁浅3 小时前
hot100 78.子集
java·算法
u0109272714 小时前
使用Plotly创建交互式图表
jvm·数据库·python
爱学习的阿磊4 小时前
Python GUI开发:Tkinter入门教程
jvm·数据库·python
froginwe114 小时前
Scala 循环
开发语言
m0_706653234 小时前
C++编译期数组操作
开发语言·c++·算法