lombok的使用

# 1. 引入

java 项目引入

1
2
3
4
5
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version> <!-- Spring Boot 项目此部分可以不写 -->
</dependency>

Android 项目引入

1
2
implementation "org.projectlombok:lombok:1.18.24"
annotationProcessor "org.projectlombok:lombok:1.18.24"

# 2. 配置文件

lombok 的配置文件名为 lombok.config, 生效的作用域为其所在的目录和其子目录

1
2
3
4
5
6
7
8
#指明lombok的根目录为当前配置文件所在目录
config.stopBubbling=true
# 解决子类对象属性值一致,但其继承的父类对象属性值不一致,在比较的时候会出现比较结果不对的情况
lombok.equalsAndHashCode.callSuper=call
# 使子类的toString方法包括其继承的父类对象属性值
lombok.toString.callSuper = call
#生成的set方法返回由null改为this,可以链式调用
#lombok.accessors.chain=true

# 3. 注解

注解 使用位置 使用效果 注解属性
@Data 为类的字段生成 get,set 方法,重写类的 equals,toString 和 hashCode 方法
@Value 字段,类 效果相当于 java17 的 record 类
@Getter 字段,类 为类的字段生成 get 方法
@Setter 字段,类 为类的字段生成 set 方法
@EqualsAndHashCode 重写类的 equals 和 hashCode 方法
@ToString 重写类的 toString 方法
@AllArgsConstructor 为类全参构造函数
@NoArgsConstructor 为类生成无参构造函数
@RequiredArgsConstructor 为类生成有参构造函数
@Builder 自动生成构造者模式代码
@val 常量声明 根据赋值推断出常量类型
@var 变量声明 根据赋值推断出常量类型 (等效 java11 的 var 关键字)
@With 字段,类 作用于类、变量,生成 with + 变量名的方法,返回当前对象
@CustomLog 自定义日志类,生成 log 对象
@NonNull 作用于成员变量和参数中,标识不能为空,否则抛出空指针异常
@Generated 用于标记类、变量、方法是自动生成的,没什么大用
@Cleanup 变量 自动关闭资源,针对实现了 java.io.Closeable 接口的对象有效
@Synchronized 方法 作用于方法,可以替换 synchronized 关键字或 lock 锁
@SneakyThrows 方法 作用于方法,对异常进行捕捉并抛出
@Singular 集合字段 作用于集合字段,需要配合 @Builder 使用,加入了 @Singular 注解后,lombok 为我们添加了一个为集合添加元素的方法

@CommonsLog,@Log,@JBossLog,@Log4j,@Log4j2,@Slf4j,@XSlf4j:日志注解,作用于类

# 4. 实验性注解的使用

@Accessors:类似于 @Builder 支持链式调用,需要配合 @Setter、@Getter 等注解使用,作用于类、变量
@Delegate:作用于容器变量,为该变量生成一堆常用的方法,这些方法都是容器中的方法
@ExtensionMethod:作用于类,向类添加方法,无需创建新的子类
@FieldDefaults:作用于类,定义变量的访问修饰符以及是否加 final
@FieldNameConstants:作用于类,生成一个包含所有成员变量的内部类或者内部枚举,内部类中每个字段值即为字段名并且值不可变
@Helper:作用于方法内部类,使内部类中的方法暴露在外面可以被直接调用,不建议使用
@NonFinal:作用于类、变量,表示变量不加 final
@PackagePrivate:作用于类和变量,相当于访问修饰符的 default,没什么用
@SuperBuilder:支持对于基类成员变量赋值,算是 @Builder 的升级版
@Tolerate:实现对冲突的兼容,作用于方法上,没什么大用,可以配合 @Builder 使用
@UtilityClass:作用于类,将类标记为 final,并且类、内部类中的方法、字段都标记为 static
@WithBy3
六、基于 v1.18.22 版本的实验性注解
@StandardException:自定义异常类