超级全面的 Lombok 注解介绍,学一波

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超级全面的 Lombok 注解介绍,学一波相关的知识,希望对你有一定的参考价值。

参考技术A 使用 @Getter 和/或 @Setter 注释任何字段,以使 lombok 自动生成默认的 getter / setter 。

默认的 getter 只是返回该字段,如果该字段被称为 foo ,则名为 getFoo (如果该字段的类型为 boolean ,则为 isFoo )。

默认生成的 getter / setter 方法是公共的,除非你明确指定一个 AccessLevel 。合法访问级别为 PUBLIC,PROTECTED,PACKAGE和PRIVATE 。

你还可以在类上添加 @Getter 和/或 @Setter 注释。在这种情况下,就好像你使用该注释来注释该类中的所有非静态字段一样。

你始终可以使用特殊的 AccessLevel.NONE 访问级别来手动禁用任何字段的 getter / setter 生成。这使你可以覆盖类上的 @Getter,@Setter或@Data 注释的行为。

With Lombok:

Native Java:

任何类定义都可以使用 @ToString 注释,以使 lombok 生成 toString() 方法的实现。

默认情况下,将打印所有非静态字段。如果要跳过某些字段,可以使用 @ ToString.Exclude 注释这些字段。或者,可以通过使用 @ToString(onlyExplicitlyIncluded = true) ,然后使用 @ToString.Include 标记要包含的每个字段,来确切指定希望使用的字段。

通过将 callSuper 设置为 true ,可以将 toString 的超类实现的输出包含到输出中。请注意, java.lang.Object中toString() 的默认实现几乎毫无意义。

With Lombok:

Native Java:

任何类定义都可以使用 @EqualsAndHashCode 进行注释,以使 lombok 生成 equals(Object other) 和 hashCode() 方法的实现。默认情况下,它将使用所有非静态,非瞬态字段,但是您可以通过使用 @EqualsAndHashCode.Include 标记类型成员来修改使用哪些字段(甚至指定要使用各种方法的输出)。 @EqualsAndHashCode.Exclude 。或者,可以通过使用@ EqualsAndHashCode.Include 标记并使用 @EqualsAndHashCode(onlyExplicitlyIncluded = true) 来精确指定要使用的字段或方法。

如果将 @EqualsAndHashCode 应用于扩展另一个类的类,则此功能会有些棘手。通常,为此类自动生成 equals 和 hashCode 方法是一个坏主意,因为超类还定义了字段,该字段也需要 equals / hashCode 代码,但不会生成此代码。通过将 callSuper 设置为 true ,可以在生成的方法中包括超类的 equals 和 hashCode 方法。

搜索Java知音公众号,回复“后端面试”,送你一份Java面试题宝典.pdf

With Lombok:

Native Java:

@NoArgsConstructor 将生成没有参数的构造函数。如果字段由final修饰,则将导致编译器错误,除非使用 @NoArgsConstructor(force = true) ,否则所有final字段都将初始化为 0 / false / null 。对于具有约束的字段(例如 @NonNull 字段),不会生成任何检查。

@AllArgsConstructor 为类中的每个字段生成一个带有1个参数的构造函数。标有 @NonNull 的字段将对这些参数进行空检查。

搜索Java知音公众号,回复“后端面试”,送你一份Java面试题宝典.pdf

With Lombok:

Native Java:

@Data 是一个方便的快捷方式批注,它将 @ToString , @EqualsAndHashCode , @ Getter / @Setter 和 @RequiredArgsConstructor 的功能捆绑在一起:换句话说, @Data 生成通常与简单 POJO 关联的所有样板(普通的旧 Java 对象)和 bean :所有字段的 getter ,所有 非final 字段的 setter ,以及涉及类字段的适当的 toString , equals 和 hashCode 实现,以及初始化所有 final 字段以及所有 非final 字段的构造函数没有使用 @NonNull 标记的初始化程序,以确保该字段永远不会为 null 。

With Lombok:

Native Java:

@Value注解和 @Data 类似,区别在于它会把所有成员变量默认定义为 private final 修饰,并且不会生成 set 方法。

构建者模式

只能标注到类上,将生成类的一个当前流程的一种链式构造工厂,如下:

可配合 @Singular 注解使用, @Singular 注解使用在jdk内部集合类型的属性, Map 类型的属性以及 Guava 的 com.google.common.collect 的属性上。例如 未标注 @Singular 的属性,一般 setter 时,会直接覆盖原来的引用,标注了 @Singular 的属性,集合属性支持添加操作,会在属性原来的基础上增加。

With Lombok:

Native Java:

链式风格

@Accessors 批注用于配置 lombok 如何生成和查找 getter 和 setter 。

默认情况下, lombok 遵循针对 getter 和 setter 的 bean 规范:例如,名为 Pepper 的字段的 getter 是 getPepper 。但是,有些人可能希望打破 bean 规范,以得到更好看的 API 。 @Accessors 允许您执行此操作。

可标注在类或属性上,当然最实用的功能还是标注到类上。

标注到类上, chain 属性设置为 true 时,类的所有属性的 setter 方法返回值将为 this ,用来支持 setter 方法的链式写法。如:

fluent 属性设置为 true 时,类的所有 getter , setter 方法将省略 get 和 set 前缀,获取属性值直接使用属性名相同的无参方法,设置属性值使用属性名相同的有参方法,并且返回值为this。如:

标注到属性上,使用 prefix 设置需要省略的属性生成 getter , setter 方法时的前缀,且属性必须为驼峰式命名。

编译之后为

在需要打印日志的类中使用,项目中使用 slf4j 、 log4j 日志框架

该注解快速判断是否为空,为空抛出 java.lang.NullPointerException 。

注解自动添加到同步机制,生成的代码并不是直接锁方法,而是锁代码块, 作用范围是方法上。

注解用于确保已分配的资源被释放( IO 的连接关闭)。

以上是关于超级全面的 Lombok 注解介绍,学一波的主要内容,如果未能解决你的问题,请参考以下文章

安利一波超级好课 —— 在家也不能闲着呀!!!

新机安卓版iPhoneX发布:小辣椒S11采用刘海异形屏,正面设计超级感人

《springcloud超级入门》Spring Cloud开发环境的准备和Lombok安装步骤《四》

《springcloud超级入门》Spring Cloud开发环境的准备和Lombok安装步骤《四》

如何在龙目岛调用超级构造函数

ST表超级详解