Lombok 是 Java 最常用的代码简化工具包 ,它能通过注解 自动生成 getter、setter、构造方法、toString 等代码,不用手写重复代码!
一、Lombok 到底能干什么?
不用写:
getXxx()setXxx()toString()equals()/hashCode()- 无参/全参构造器
- 日志对象
log
只需要加几个注解,代码瞬间变干净!
二、Maven 依赖(直接复制)
在 pom.xml 里加:
xml
<!-- Lombok 核心依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
Gradle 版本:
groovy
compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'
三、IDEA 必须装插件!
否则 IDE 会报错!
- 打开 IDEA → File → Settings → Plugins
- 搜索 Lombok
- 安装 → 重启 IDEA
四、最常用注解(背会这 8 个就够)
1. @Data(最强万能注解)
自动生成:
- getter / setter
- toString
- equals / hashCode
- 无参构造
java
@Data
public class User {
private Long id;
private String name;
}
2. @AllArgsConstructor
全参构造
java
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class User {
private Long id;
private String name;
}
等价:
java
public User(Long id, String name) {
this.id = id;
this.name = name;
}
3. @NoArgsConstructor
无参构造
java
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class User {
private Long id;
private String name;
}
等价:
java
public User() {
}
4. @ToString
toString 方法
java
import lombok.ToString;
@ToString
public class User {
private Long id;
private String name;
}
等价于:
java
public String toString() {
return "User(id=" + id + ", name=" + name + ")";
}
5. @EqualsAndHashCode
equals 和 hashCode
java
@Override
public boolean equals(Object o) {
// 1. 同一内存地址 → 相等
if (this == o) return true;
// 2. 对象为null 或 类型不同 → 不相等
if (o == null || getClass() != o.getClass()) return false;
// 3. 强制转换成同类项
User user = (User) o;
// 4. 逐字段比较内容 → 全部相同才相等
return Objects.equals(id, user.id) && Objects.equals(name, user.name);
}
@Override
public int hashCode() {
// 根据所有字段生成哈希值
return Objects.hash(id, name);
}
# 两个对象 equals 相等 → hashCode 必须相等;hashCode 相等 → equals 不一定相等
# equals 比较内容,== 比较地址
6. @Getter / @Setter
只生成 getter / setter
java
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private Long id;
private String name;
}
等价于手动写:
java
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
7. @Slf4j
直接用 log 输出日志
java
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class UserService {
public void test() {
log.info("用户信息查询成功");
log.error("系统异常", e);
}
}
等价于手动写:
java
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserService.class);
8. @Builder
建造者模式,优雅赋值
java
User user = User.builder()
.id(1)
.name("张三")
.build();