前言
Lombok 是一个 Java 库,它通过注解的方式帮助我们自动生成构造器、getter/setter、equals、hashCode、toString 等方法,极大地简化了 JavaBean 的编写。对于经常需要编写大量的样板代码的工作来说,Lombok 提供了一种优雅的解决方案。
一、Lombok 注解概览
以下是一些常用的 Lombok 注解:
-
@Data:
这是一个组合注解,相当于同时使用了@ToString
、@EqualsAndHashCode
、@Getter
/@Setter
和@RequiredArgsConstructor
。它会生成所有字段的 getter/setter 方法,以及重写 equals 和 hashCode 方法,并提供一个包含所有非静态、非_transient 字段的构造函数。 -
@Value:
类似于 @Data,但是它会生成不可变的类(所有字段默认为 final,且没有 setter 方法)。同时,它也会生成 equals 和 hashCode 方法,并添加一个全参数构造函数。此外,所有的字段都会默认加上@NonNull
注解,确保对象实例化时不能有 null 值。 -
@NoArgsConstructor, @RequiredArgsConstructor 和 @AllArgsConstructor:
@NoArgsConstructor
生成无参构造函数。@RequiredArgsConstructor
生成包含所有 final 或者 @NonNull 注解字段的构造函数。@AllArgsConstructor
生成包含类中所有字段的构造函数。
-
@Getter 和 @Setter:
@Getter
会在每个字段上生成对应的 getter 方法。@Setter
则是生成 setter 方法。
如果你希望某个字段只生成 getter 不生成 setter,或者反过来,可以在该字段上单独使用这两个注解。
-
@ToString:
自动为类生成 toString 方法,默认包含所有字段。可以通过exclude
或of
参数指定包含或排除某些字段。 -
@EqualsAndHashCode:
自动生成 equals 和 hashCode 方法,可以设置callSuper
参数决定是否调用父类的方法,以及通过exclude
参数排除某些字段。 -
@SneakyThrows:
允许方法抛出未检查异常,而无需在方法签名中声明。这对于处理 IOException 等受检异常非常方便。 -
@Cleanup:
在局部变量上使用此注解后,当离开当前作用域时,Lombok 将自动关闭这个实现了 Closeable 接口的对象,如 InputStream、OutputStream 等。 -
@NonNull:
添加此注解的字段,在 Setter 方法中会被自动进行非空检查,如果传入null值则会抛出 NullPointerException。
以上就是 Lombok 中一些常见且实用的注解,使用它们可以大大减少重复代码,提高开发效率。但在使用前,请确保你的项目已经正确引入了 Lombok 插件并配置了 IDE 支持,否则可能会出现编译错误或提示找不到相应方法的问题。
二、Lombok 使用示例
import lombok.Data;
import lombok.NonNull;
@Data
public class User {
@NonNull
private String name;
private int age;
// 仅 @Data 注解就足够生成以下代码
// public String getName() { return this.name; }
// public void setName(String name) { this.name = name; }
// public int getAge() { return this.age; }
// public void setAge(int age) { this.age = age; }
// public User(String name, int age) { ... }
// @Override
// public String toString() { return "User{" + "name=" + name + ", age=" + age + '}'; }
// ...
}
总结起来,Lombok 是一种强大的工具,它通过简洁的注解语法让我们能更专注于业务逻辑的实现,而不是被繁琐的模板代码所困扰。然而,过度依赖 Lombok 可能会使代码变得难以理解和维护,因此在实际项目中应适度使用。