lombok @data lombok

超级全面的 Lombok 注解介绍,学一波使用@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 方法的链式写法 。如:

秒懂生活扩展阅读