一、Lombok
Lombok 是一个 Java 库,它可以帮助开发者减少在 Java 中编写那些繁琐的“boilerplate”代码的工作量。所谓“boilerplate”代码是指那些重复性的、模板化的代码,例如 getter、setter、构造函数、equals 和 hashCode 方法等。使用 Lombok 可以通过简单的注解来代替这些手动编写的代码。
二、Lombok的使用方法
添加Lombok
要在 Maven 或 Gradle 项目中添加 Lombok 依赖,你需要在项目的构建文件中加入相应的依赖声明。
对于 Maven 项目:
打开你的 pom.xml 文件。
在 <dependencies> 标签内添加如下依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>最新版本号</version>
<!-- 检查是否需要排除特定的依赖 -->
<scope>provided</scope>
</dependency>
对于 Gradle 项目:
打开你的 build.gradle 文件。
在 dependencies 块中添加如下依赖:
dependencies {
// 使用提供的编译范围,因为在运行时不需要 lombok
compileOnly 'org.projectlombok:lombok:最新版本号'
// 如果你的 IDE 不是 IntelliJ IDEA, 你可能需要下面这个注解处理器
annotationProcessor 'org.projectlombok:lombok:最新版本号'
}
注意事项:
如果你在使用 IntelliJ IDEA,那么它已经内置了对 Lombok 的支持,因此不需要额外的配置。
如果你在使用 Eclipse,可能需要安装 Lombok 插件来获得对 Lombok 注解的支持。可以访问 Eclipse Marketplace 并搜索 "Lombok" 来安装。
确保你的 IDE 已经配置好 Lombok,以便能够正确识别和处理 Lombok 注解。
当使用 Lombok 时,确保你的编译器支持注解处理(如 javac 的 -parameters 选项),这样可以避免某些情况下出现的问题。
安装Lombok插件
对于 IntelliJ IDEA:
打开设置界面:
在 Windows 或 Linux 上,选择 File > Settings。
在 macOS 上,选择 IntelliJ IDEA > Preferences。
导航到 Plugins 面板:
在设置窗口中,选择 Plugins。
安装 Lombok 插件:
点击 Marketplace 按钮或 Browse repositories...。
在搜索框中输入 Lombok 并回车。
从结果列表中选择 Lombok 插件。
点击 Install 按钮来安装插件。
安装完成后,重启 IntelliJ IDEA。
对于 Eclipse:
打开帮助菜单:
在 Eclipse 菜单栏中选择 Help。
访问市场:
选择 Eclipse Marketplace...。
搜索并安装 Lombok 插件:
在搜索框中输入 Lombok 并回车。
选择 Lombok 插件并点击 Go。
点击 Install 按钮。
遵循安装向导的指示完成安装过程。
安装完成后,可能需要重新启动 Eclipse。
使用Lombok注解
示例类
假设我们有一个简单的 Java 类,如下所示:
public class Person {
private String name;
private int age;
private boolean active;
}
使用 Lombok 注解
1. @Getter 和 @Setter
这两个注解分别用于自动生成 getter 和 setter 方法。它们可以作用于类级别或单独的字段级别。
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Person {
private String name;
private int age;
private boolean active;
}
2. @NoArgsConstructor 和 @AllArgsConstructor
这些注解用于生成无参构造器和包含所有非静态非 final 字段的构造器。
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private String name;
private int age;
private boolean active;
}
3. @ToString
此注解用于生成toString()方法,该方法会返回类中所有字段的信息。
import lombok.ToString;
@ToString
public class Person {
private String name;
private int age;
private boolean active;
}
4. @EqualsAndHashCode
此注解用于生成equals()和hashCode()方法。可以指定哪些字段参与比较。
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(of = {"name", "age"})
public class Person {
private String name;
private int age;
private boolean active;
}
5. @Data
@Data是一个组合注解,它包含了@ToString,@EqualsAndHashCode,@Getter/@Setter,@RequiredArgsConstructor的功能。
import lombok.Data;
@Data
public class Person {
private String name;
private int age;
private boolean active;
}
6. @Value
@Value创建一个不可变类,所有字段默认是final并且会被初始化。
import lombok.Value;
@Value
public class Person {
private String name;
private int age;
private boolean active;
}
7. @Builder
@Builder提供了一个流畅的构造方式来创建对象实例。
import lombok.Builder;
@Builder
public class Person {
private String name;
private int age;
private boolean active;
}
// 使用示例
Person person = Person.builder()
.name("张三")
.age(30)
.active(true)
.build();
注意事项
在使用 Lombok 时,请确保你的 IDE 已经安装了 Lombok 插件,并且项目中已经正确配置了 Lombok 依赖。
有时候 IDE 可能无法立即识别 Lombok 生成的方法,此时可以尝试重启 IDE 或者重新编译项目。
使用 @Data 注解时要小心,因为它会自动为所有字段生成 getter 和 setter,这可能导致意外地修改类的状态。如果需要不可变对象,考虑使用 @Value。
三、Lombok语法
常用注解及语法
1. @Getter 和 @Setter
作用:生成 getter 和 setter 方法。
语法:可以作用于类级别或字段级别。
import lombok.Getter;
import lombok.Setter;
public class Person {
@Getter @Setter
private String name; // 自动生成 getName() 和 setName(String)
@Getter // 只生成 getter
private int age; // 自动生成 getAge()
private boolean active; // 默认无 getter 或 setter
}
2. @NoArgsConstructor 和 @AllArgsConstructor
作用:生成无参构造器和包含所有非静态非 final 字段的构造器。
语法:作用于类级别。
import lombok.Getter;
import lombok.Setter;
public class Person {
@Getter @Setter
private String name; // 自动生成 getName() 和 setName(String)
@Getter // 只生成 getter
private int age; // 自动生成 getAge()
private boolean active; // 默认无 getter 或 setter
}
2. @NoArgsConstructor 和 @AllArgsConstructor
作用:生成无参构造器和包含所有非静态非 final 字段的构造器。
语法:作用于类级别。
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@NoArgsConstructor // 生成无参构造器
@AllArgsConstructor // 生成包含所有字段的构造器
public class Person {
private String name;
private int age;
private boolean active;
}
3. @ToString
作用:生成 toString() 方法。
语法:作用于类级别。
import lombok.ToString;
@ToString
public class Person {
private String name;
private int age;
private boolean active;
}
4. @EqualsAndHashCode
作用:生成 equals() 和 hashCode() 方法。
语法:作用于类级别,可以指定参与比较的字段。
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(of = {"name", "age"}) // 指定 name 和 age 参与比较
public class Person {
private String name;
private int age;
private boolean active;
}
5. @Data
作用:组合注解,相当于 @ToString, @EqualsAndHashCode, @Getter / @Setter, @RequiredArgsConstructor。
语法:作用于类级别。
import lombok.Data;
@Data // 组合注解
public class Person {
private String name;
private int age;
private boolean active;
}
6. @Value
作用:创建一个不可变的类,所有字段默认是 final 并且会被初始化。
语法:作用于类级别。
import lombok.Value;
@Value // 创建不可变对象
public class Person {
private String name;
private int age;
private boolean active;
}
7. @Builder
作用:提供流畅的构造方式来创建对象实例。
语法:作用于类级别。
import lombok.Builder;
@Builder
public class Person {
private String name;
private int age;
private boolean active;
}
// 使用示例
Person person = Person.builder()
.name("张三")
.age(30)
.active(true)
.build();
其他注解
除了上述注解外,还有一些其他有用的注解:
@NonNull:标记字段为非空,通常与 @AllArgsConstructor 或 @Builder 结合使用。
@Log 或 @Log4j:生成日志对象。
@Singular:用于集合类型的字段,允许在构造时使用加法操作符添加元素。
示例代码
下面是一个结合多个注解的示例:
import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class Person {
@NonNull
private String name;
private int age;
private boolean active;
@Singular
private List<String> hobbies;
}
在这个示例中,@Data 注解提供了大部分基本功能,@NoArgsConstructor 和 @AllArgsConstructor 分别生成了无参构造器和全参数构造器,@Builder 则提供了构造者的便利性,而 @NonNull 和 @Singular 用于进一步定制构造逻辑。