在 Java 开发中,我们常常被大量重复的 getter
、setter
、toString
、equals
和 hashCode
方法所困扰。这些样板代码(Boilerplate Code)不仅冗长,还降低了代码的可读性和维护性。Lombok 作为一个轻量级 Java 库,能够自动生成这些方法,极大地提升了开发效率,让代码更加简洁优雅。
在 Maven 项目中,可以通过以下方式引入 Lombok 依赖:
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.30version>
<scope>providedscope>
dependency>
对于 Gradle 项目,添加以下依赖:
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'
}
安装 Lombok 后,还需要在 IDE(如 IntelliJ IDEA、Eclipse)中启用 Lombok 插件,以获得更好的代码提示支持。
@Getter
和 @Setter
自动生成类字段的 getter
和 setter
方法。
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private int age;
}
这样就避免了手写 getName()
和 setName()
,让代码更加简洁。
@ToString
自动生成 toString()
方法。
import lombok.ToString;
@ToString
public class User {
private String name;
private int age;
}
如果需要排除某些字段,可以使用 exclude
属性:
@ToString(exclude = "age")
public class User {
private String name;
private int age;
}
@EqualsAndHashCode
自动生成 equals()
和 hashCode()
方法。
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class User {
private String name;
private int age;
}
如果只想使用特定字段计算 equals
和 hashCode
,可以这样做:
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class User {
@EqualsAndHashCode.Include
private String name;
private int age;
}
@NoArgsConstructor
:生成无参构造方法。@AllArgsConstructor
:生成包含所有字段的构造方法。@RequiredArgsConstructor
:生成只包含 final
字段的构造方法。示例:
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class User {
private String name;
private final int age;
}
@Data
是 Lombok 最常用的注解,相当于 @Getter
、@Setter
、@ToString
、@EqualsAndHashCode
和 @RequiredArgsConstructor
的组合。
import lombok.Data;
@Data
public class User {
private String name;
private int age;
}
@Builder
生成 流式 API 风格 的构造器。
import lombok.Builder;
@Builder
public class User {
private String name;
private int age;
}
使用方式:
User user = User.builder()
.name("Alice")
.age(25)
.build();
@Slf4j
自动生成 Logger
日志对象。
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LoggingExample {
public void logMessage() {
log.info("This is a log message");
}
}
Lombok 允许通过 lombok.config
文件进行全局配置,使其符合团队的代码风格。
lombok.config
在项目根目录创建 lombok.config
文件。
config.stopBubbling = true
lombok.accessors.chain = true
lombok.accessors.fluent = true
配置项 | 作用 |
---|---|
config.stopBubbling |
停止向上级目录查找 lombok.config |
lombok.accessors.chain |
让 Setter 支持链式调用 |
lombok.accessors.fluent |
让 Getter/Setter 生成无 get/set 前缀的方法 |
lombok.equalsAndHashCode.callSuper |
@EqualsAndHashCode 是否调用 super.equals() |
lombok.log.fieldName |
@Slf4j 生成的日志变量名 |
config.stopBubbling = true
lombok.accessors.chain = true
lombok.accessors.fluent = false
lombok.log.fieldName = LOGGER
Lombok 通过注解消除了大量样板代码,使代码更加简洁、易读,并提升了开发效率。结合 lombok.config
进行合理配置,还可以让代码更加符合团队的编码规范。
你是否已经在项目中使用 Lombok?欢迎在评论区交流你的经验!