目录
一、什么是 Lombok?
1.1 没有 Lombok 的痛苦
1.2 有了 Lombok 的优雅
二、快速入门
2.1 添加依赖
2.2 安装 IDE 插件
2.3 启用注解处理
三、第一个 Lombok 程序
3.1 创建实体类
3.2 使用实体类
四、@Data 注解详解
4.1 等价代码
五、常见问题
5.1 Lombok 不生效?
5.2 @Data 的坑
六、总结
下一篇
参考资料
你是否厌倦了为每个字段手写 getter 和 setter?Lombok 来拯救你了!
一、什么是 Lombok?
Lombok 是一个 Java 工具库,它通过注解在编译期自动生成样板代码,比如:
- getter / setter 方法
- toString() 方法
- equals() 和 hashCode() 方法
- 构造方法
1.1 没有 Lombok 的痛苦
public class User {
private Long id;
private String name;
private Integer age;
private String email;
// getter 方法
public Long getId() {
return id;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public String getEmail() {
return email;
}
// setter 方法
public void setId(Long id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setEmail(String email) {
this.email = email;
}
// toString 方法
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\\'' +
", age=" + age +
", email='" + email + '\\'' +
'}';
}
// equals 和 hashCode
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(id, user.id) &&
Objects.equals(name, user.name) &&
Objects.equals(age, user.age) &&
Objects.equals(email, user.email);
}
@Override
public int hashCode() {
return Objects.hash(id, name, age, email);
}
}
问题:4 个字段就写了 50+ 行代码,如果有 10 个字段呢?
1.2 有了 Lombok 的优雅
import lombok.Data;
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
效果:自动生成所有 getter、setter、toString、equals、hashCode 方法!
二、快速入门
2.1 添加依赖
Maven:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
Gradle:
compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'
2.2 安装 IDE 插件
- IntelliJ IDEA:安装 Lombok 插件(Settings → Plugins → 搜索 Lombok)
- Eclipse:下载 lombok.jar,运行 java -jar lombok.jar 安装
2.3 启用注解处理
IntelliJ IDEA:
三、第一个 Lombok 程序
3.1 创建实体类
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long id;
private String name;
private Integer age;
}
3.2 使用实体类
public class Main {
public static void main(String[] args) {
// 使用无参构造
User user1 = new User();
user1.setId(1L);
user1.setName("张三");
user1.setAge(25);
System.out.println(user1); // User(id=1, name=张三, age=25)
// 使用全参构造
User user2 = new User(2L, "李四", 30);
System.out.println(user2.getName()); // 李四
// equals 和 hashCode
System.out.println(user1.equals(user2)); // false
}
}
四、@Data 注解详解
@Data 是 Lombok 最常用的注解,它是以下注解的组合:
| @Getter | 生成所有字段的 getter 方法 |
| @Setter | 生成所有字段的 setter 方法 |
| @ToString | 生成 toString() 方法 |
| @EqualsAndHashCode | 生成 equals() 和 hashCode() 方法 |
| @RequiredArgsConstructor | 生成包含 final 字段的构造方法 |
4.1 等价代码
@Data
public class User {
private Long id;
private String name;
}
// 等价于:
@Getter
@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor
public class User {
private Long id;
private String name;
}
五、常见问题
5.1 Lombok 不生效?
检查清单:
5.2 @Data 的坑
@Data 会生成 equals() 和 hashCode() 方法,但不会包含父类字段。
@Data
public class Student extends User {
private String school;
}
// Student 的 equals() 只比较 school 字段,不比较 User 的字段!
解决方案:
@Data
@EqualsAndHashCode(callSuper = true) // 包含父类字段
public class Student extends User {
private String school;
}
六、总结
| 作用 | 减少样板代码 |
| 原理 | 编译期自动生成代码 |
| 常用注解 | @Data、@Getter、@Setter |
| 优势 | 代码简洁、减少错误、易于维护 |
| 注意事项 | 需要 IDE 插件支持 |





