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 对象的 id 和 name 字段是否相等,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.File 和 java.util.Scanner 相关操作可能会抛出 FileNotFoundException 等已检查异常,但使用 @SneakyThrows 后无需在方法签名中声明或在方法内部进行显式的异常处理。在实际应用中,谨慎使用此注解,以确保异常能够得到适当处理。