💡 一则也许对你有用的小广告 🏆
欢迎飞飞程序员 ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 1v1 提问 / Java 学习路线 / PHP 学习路线 / 学习打卡 / 社群讨论
截止目前, 飞飞 正在疯狂爆肝实战项目,后续还会上新更多项目,目标是将所学知识开发成项目并且分享给大家,如知识付费系统, Ai系统, CMS系统,在线商城系统,等等 ,欢迎点击围观
Lombok 是一个 Java 库,通过注解的方式自动生成 getter/setter、构造方法、equals/hashCode 等方法,可以大大减少样板代码,提高开发效率。
安装 Lombok
1. Maven 项目添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version> <!-- 使用最新版本 -->
<scope>provided</scope>
</dependency>
2. IDE 安装插件
- IntelliJ IDEA: 需要安装 Lombok 插件
- Eclipse: 需要下载 lombok.jar 并运行安装
常用注解详解
1. @Getter/@Setter
自动生成 getter 和 setter 方法。
@Getter
@Setter
public class User {
private String name;
private int age;
}
等效于:
public class User {
private String name;
private int age;
public String getName() { return this.name; }
public int getAge() { return this.age; }
public void setName(String name) { this.name = name; }
public void setAge(int age) { this.age = age; }
}
2. @ToString
自动生成 toString() 方法。
@ToString
public class User {
private String name;
private int age;
}
3. @EqualsAndHashCode
自动生成 equals() 和 hashCode() 方法。
@EqualsAndHashCode
public class User {
private String name;
private int age;
}
4. @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
自动生成构造方法:
@NoArgsConstructor: 无参构造方法
@RequiredArgsConstructor: 为所有 final 字段和 @NonNull 字段生成构造方法
@AllArgsConstructor: 全参构造方法
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private int age;
}
5. @Data
组合注解,相当于 @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor
@Data
public class User {
private String name;
private int age;
}
6. @Builder
提供建造者模式支持。
@Builder
public class User {
private String name;
private int age;
}
// 使用
User user = User.builder()
.name("张三")
.age(25)
.build();
7. @Slf4j
自动生成日志对象。
@Slf4j
public class UserService {
public void doSomething() {
log.info("Doing something...");
}
}
8. @NonNull
自动生成非空检查。
public class User {
@Setter @NonNull
private String name;
}
// 相当于
public void setName(@NonNull String name) {
if (name == null) {
throw new NullPointerException("name is marked non-null but is null");
}
this.name = name;
}
9. @Value
不可变类注解,相当于 final + @Getter + @ToString + @EqualsAndHashCode + @AllArgsConstructor
@Value
public class ImmutableUser {
String name;
int age;
}
10. @Cleanup
自动管理资源,确保调用 close() 方法。
public void copyFile(String in, String out) throws IOException {
@Cleanup InputStream is = new FileInputStream(in);
@Cleanup OutputStream os = new FileOutputStream(out);
byte[] b = new byte[1024];
int r;
while ((r = is.read(b)) != -1) {
os.write(b, 0, r);
}
}
高级用法
1. 配置 Lombok 行为
可以在项目根目录创建 lombok.config 文件来配置 Lombok 行为:
# 禁止生成 @Data 的 toString 方法
lombok.data.flagUsage = WARNING
2. 自定义构造方法
可以与 Lombok 生成的构造方法共存:
@AllArgsConstructor
public class User {
private String name;
private int age;
public User(String name) {
this(name, 0);
}
}
3. 排除字段
@ToString(exclude = "age")
@EqualsAndHashCode(exclude = {"id", "age"})
public class User {
private String id;
private String name;
private int age;
}
注意事项
- IDE 支持: 必须安装 Lombok 插件才能正确识别生成的代码
- 序列化: 使用 @Data 或 @Value 时要注意序列化问题
- 继承: 使用 @EqualsAndHashCode 和 @ToString 时要注意继承关系
- 调试: 由于代码是编译时生成的,调试时可能会有些不便
Lombok 能显著减少样板代码,但也要根据项目实际情况合理使用,避免过度依赖。