当前位置: 首页 > news >正文

6、Lombok-速查手册:常用注解语法与生成代码对照表

使用说明:本手册按功能分类整理 Lombok 常用注解,包含完整参数说明默认行为生成代码示例,便于开发时快速查阅。


1. 基础 POJO、DTO、VO 注解

@Getter / @Setter

注解位置
  • 类级别:作用于所有非静态字段
  • 字段级别:作用于单个字段
参数说明
参数类型默认值说明
valueAccessLevelPUBLIC生成方法的访问级别
onMethod_Annotation[]{}为生成的方法添加注解(Java 8+ 语法)
onParam_Annotation[]{}为 setter 参数添加注解

💡 AccessLevel 可选值PUBLICPROTECTEDPACKAGEPRIVATENONE

使用示例
// 类级别
@Getter
@Setter
public class User {private String name;private int age;
}// 字段级别 + 自定义访问级别
public class SecureUser {@Getter(AccessLevel.PROTECTED)@Setter(AccessLevel.PRIVATE)private String password;@Getter@Setterprivate String username;
}
生成代码
// User 类生成
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
public int getAge() { return this.age; }
public void setAge(int age) { this.age = age; }// SecureUser 类生成
protected String getPassword() { return this.password; }
private void setPassword(String password) { this.password = password; }
public String getUsername() { return this.username; }
public void setUsername(String username) { this.username = username; }

@ToString

参数说明
参数类型默认值说明
includeFieldNamesbooleantrue是否包含字段名
excludeString[]{}排除的字段名
ofString[]{}仅包含的字段(优先级高于 exclude)
callSuperbooleanfalse是否调用父类 toString()
doNotUseGettersbooleanfalse直接访问字段而非 getter
使用示例
@ToString(exclude = {"password", "secretKey"})
public class User {private String username;private String password;private String secretKey;private int loginCount;
}@ToString(of = {"id", "name"}, callSuper = true)
public class Employee extends Person {private Long id;private String name;private Double salary; // 不会出现在 toString 中
}
生成代码
// User 类生成
@Override
public String toString() {return "User(username=" + this.username + ", loginCount=" + this.loginCount + ")";
}// Employee 类生成
@Override
public String toString() {return super.toString() + "Employee(id=" + this.id + ", name=" + this.name + ")";
}

@EqualsAndHashCode

参数说明
参数类型默认值说明
excludeString[]{}排除的字段
ofString[]{}仅包含的字段
callSuperbooleanfalse是否包含父类字段
doNotUseGettersbooleanfalse直接访问字段
cacheStrategyCacheStrategyCACHE_NOTHING缓存策略(高级用法)
使用示例
@EqualsAndHashCode(exclude = {"lastModified"})
public class Article {private Long id;private String title;private LocalDateTime lastModified;
}@EqualsAndHashCode(callSuper = true)
public class Dog extends Animal {private String breed;
}
生成代码
// Article 类生成
@Override
public boolean equals(Object o) {if (o == this) return true;if (!(o instanceof Article)) return false;Article other = (Article) o;if (!other.canEqual(this)) return false;final Object this$id = this.id;final Object other$id = other.id;if (this$id == null ? other$id != null : !this$id.equals(other$id)) return false;final Object this$title = this.title;final Object other$title = other.title;if (this$title == null ? other$title != null : !this$title.equals(other$title)) return false;return true;
}@Override
public int hashCode() {final int PRIME = 59;int result = 1;result = result * PRIME + (this.id == null ? 43 : this.id.hashCode());result = result * PRIME + (this.title == null ? 43 : this.title.hashCode());return result;
}// canEqual 方法(用于继承场景)
protected boolean canEqual(Object other) {return other instanceof Article;
}

2. 组合注解

@Data

等价注解组合
@Getter
@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor
注意事项
  • 不生成无参构造器!需要额外添加 @NoArgsConstructor
  • 所有字段都参与 equals/hashCode/toString
使用示例
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product {private Long id;private String name;private Double price;
}
生成代码

包含上述所有注解的生成内容,外加:

// 无参构造器
public Product() {}// 全参构造器
public Product(Long id, String name, Double price) {this.id = id;this.name = name;this.price = price;
}

@Value

特点
  • 创建不可变类
  • 所有字段自动变为 private final
  • 只生成 getter,不生成 setter
  • 生成全参构造器
使用示例
@Value
public class Point {int x;int y;
}
生成代码
public final class Point {private final int x;private final int y;public Point(int x, int y) {this.x = x;this.y = y;}public int getX() { return this.x; }public int getY() { return this.y; }// toString, equals, hashCode 方法...// 注意:没有 setter 方法!
}

3. 构造器注解

@NoArgsConstructor

参数说明
参数类型默认值说明
accessAccessLevelPUBLIC构造器访问级别
forcebooleanfalse强制生成(即使有 final 字段)
使用示例
@NoArgsConstructor
public class User {private String name;
}@NoArgsConstructor(force = true)
public class ImmutableUser {private final String id = "default";private final String name;
}
生成代码
// User 类
public User() {}// ImmutableUser 类(force = true)
public ImmutableUser() {// final 字段被强制初始化为默认值this.name = null; // 注意:这可能导致 NullPointerException
}

@AllArgsConstructor

参数说明
参数类型默认值说明
accessAccessLevelPUBLIC构造器访问级别
staticNameString""生成静态工厂方法
使用示例
@AllArgsConstructor(staticName = "of")
public class Coordinate {private int x;private int y;
}
生成代码
// 常规构造器
public Coordinate(int x, int y) {this.x = x;this.y = y;
}// 静态工厂方法(staticName = "of")
public static Coordinate of(int x, int y) {return new Coordinate(x, y);
}

@RequiredArgsConstructor

生成规则

为以下字段生成构造器:

  • 所有 final 字段
  • 所有标记 @NonNull 的字段
使用示例
@RequiredArgsConstructor
public class UserService {private final UserRepository userRepository;@NonNullprivate String defaultRole;
}
生成代码
public UserService(UserRepository userRepository, String defaultRole) {this.userRepository = userRepository;if (defaultRole == null) {throw new NullPointerException("defaultRole is marked non-null but is null");}this.defaultRole = defaultRole;
}

4. Builder 模式注解

@Builder

参数说明
参数类型默认值说明
builderMethodNameString"builder"Builder 方法名
buildMethodNameString"build"build 方法名
toBuilderbooleanfalse生成 toBuilder 方法
使用示例
@Builder(builderMethodName = "newBuilder", buildMethodName = "create")
public class Order {private String orderId;private Double amount;
}
生成代码
// Builder 内部类
public static class OrderBuilder {private String orderId;private Double amount;OrderBuilder() {}public OrderBuilder orderId(String orderId) {this.orderId = orderId;return this;}public OrderBuilder amount(Double amount) {this.amount = amount;return this;}public Order create() { // buildMethodName = "create"return new Order(orderId, amount);}
}// Builder 方法
public static OrderBuilder newBuilder() { // builderMethodName = "newBuilder"return new OrderBuilder();
}

@Singular(集合字段支持)

支持的集合类型
  • List<T>element(T)elements(Collection<T>)
  • Set<T>element(T)elements(Collection<T>)
  • Map<K,V>entry(K, V)entries(Map<K,V>)
使用示例
@Builder
public class ShoppingCart {@Singular("product")private List<String> products;@Singularprivate Map<String, Integer> quantities;
}
使用方式
ShoppingCart cart = ShoppingCart.builder().product("Laptop")           // 添加单个元素.product("Mouse")            // 继续添加.products(Arrays.asList("Keyboard", "Monitor")) // 批量添加.entry("Laptop", 1)          // Map 单个条目.entries(Map.of("Mouse", 2, "Keyboard", 1))     // Map 批量.build();

5. 日志注解

@Slf4j

生成代码
// 源码
@Slf4j
public class MyService {public void doSomething() {log.info("Doing something");}
}// 生成
public class MyService {private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(MyService.class);public void doSomething() {log.info("Doing something");}
}
其他日志框架支持
注解生成的日志实例类型
@Logjava.util.logging.Logger
@Log4jorg.apache.log4j.Logger
@Log4j2org.apache.logging.log4j.Logger
@CommonsLogorg.apache.commons.logging.Log
@JBossLogorg.jboss.logging.Logger

6. 高级功能注解

@SneakyThrows

参数说明
参数类型默认值说明
valueClass<? extends Throwable>[]Exception.class要 sneaky 抛出的异常类型
使用示例
@SneakyThrows
public String readFile(String path) {return Files.readString(Paths.get(path)); // IOException
}@SneakyThrows({IOException.class, SQLException.class})
public void doDatabaseOperation() {// 可能抛出两种检查异常
}
生成代码
public String readFile(String path) {try {return Files.readString(Paths.get(path));} catch (IOException e) {throw lombok.Lombok.sneakyThrow(e);}
}

@Cleanup

参数说明
参数类型默认值说明
valueString"close"清理方法名
使用示例
public byte[] readFile(String path) throws IOException {@CleanupFileInputStream fis = new FileInputStream(path);return fis.readAllBytes();
}public void customResource() {@Cleanup("destroy")MyResource resource = new MyResource();// 使用 resource
} // 自动调用 resource.destroy()
生成代码
public byte[] readFile(String path) throws IOException {FileInputStream fis = new FileInputStream(path);try {return fis.readAllBytes();} finally {if (fis != null) {fis.close();}}
}

@With

使用示例
@With
public class Point {private final int x;private final int y;
}
生成代码
public Point withX(int x) {return this.x == x ? this : new Point(x, this.y);
}public Point withY(int y) {return this.y == y ? this : new Point(this.x, y);
}

7. 快速参考表

注解主要用途关键参数注意事项
@Getter/@Setter生成访问器value(AccessLevel)可控制访问级别
@ToString生成 toStringexclude, of, callSuper敏感字段务必排除
@EqualsAndHashCode生成相等性方法exclude, of, callSuper继承时设 callSuper=true
@DataPOJO 万能注解不生成无参构造器
@Value不可变对象字段自动 final
@NoArgsConstructor无参构造器forceJPA/JSON 必需
@AllArgsConstructor全参构造器staticName可生成静态工厂
@RequiredArgsConstructor必需字段构造器Spring 构造器注入推荐
@BuilderBuilder 模式builderMethodName, toBuilder复杂对象创建首选
@Singular集合 Builder 支持配合 @Builder 使用
@Slf4j日志实例推荐 SLF4J
@SneakyThrows绕过检查异常value谨慎使用
@Cleanup自动资源管理value(方法名)替代 try-with-resources
@With不可变副本函数式编程友好

8. 使用建议

✅ 推荐组合

// DTO 标准写法
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString(exclude = "password")
public class UserDTO {// ...
}// 不可变配置类
@Value
@Builder
public class DatabaseConfig {// ...
}

❌ 避免组合

// 危险:JPA 实体不要用 @Data
@Data
@Entity
public class User { /* ... */ }// 冗余:@Data 已包含 @Getter/@Setter
@Data
@Getter
@Setter
public class Product { /* ... */ }

💡 记住:Lombok 是工具,理解生成的代码才能用好它!

http://www.dtcms.com/a/418493.html

相关文章:

  • app免费模板下载网站电子商务网站建设与管理读后感
  • 大语言模型LLM解决AI幻觉方法的深度分析
  • Spec 工作流
  • Genome Biology | scKAN:连接单细胞数据分析与药物发现的可解释架构
  • Javascript输入输出
  • BEVfusion解读(三)
  • JavaScript身份证号校验算法
  • 【centos生产环境搭建(三)jdk环境配置】
  • HarmonyOS NEXT 5.0 的星闪(NearLink)开发应用案例
  • Redis 入门:高效缓存与数据存储的利器
  • 贝尔利网站免费永久php免备案空间
  • Python字典:高效数据管理的瑞士军刀
  • Requests 库详解:爬虫工程师的 “瑞士军刀”
  • 用python实现将csv文件数据插入到mysql
  • 【第十五周】机器学习的学习笔记11
  • 一款强大的开源 MQTT 消息服务器:EMQX
  • 如何 网站优化公司做网站百度可以搜到吗
  • 门户网站 管理系统网站关键词怎么填写
  • lucene 8.7.0 版本中的倒排索引、数字、DocValues三种类型的查询性能对比
  • 关于npm和pnpm
  • Django 中的元类(Metaclass)应用及生产场景示例
  • 以涡度通量塔的高频观测数据为例,基于MATLAB开展;生态碳汇涡度相关监测与通量数据分析实践技术应用
  • 慈溪网站建设哪家好襄阳蒂凯网络网站建设小程序
  • 做网站保存什么格式最好建设银行企业网上银行网站打不开
  • 数据仓库和商务智能考试考点及关系梳理
  • 灵犀互娱笔试
  • 【多线程】什么是原子操作(Atomic Operation)?
  • Visual Studio Code 的 AI 插件汇总
  • Java学习笔记六(集合)
  • 简易分析慢 SQL 的流程和方法