requiredargsconstructor的简单介绍
- 游戏资讯
- 发布时间:2025-01-16 14:44:49
本文目录一览
- 1、超级全面的 Lombok 注解介绍,学一波
- 2、Lombok常用注解(一)@Data @RequiredArgsConstructor @NoArgsConstructor @AllArgsConstructor
- 3、@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
- 4、Lombok注解
- 5、Java springboot问题,请问如图中上下两种方式有什么区别?作用是什么?哪种方式好一点?
超级全面的 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 方法的链式写法。如:
fluent 属性设置为 true 时,类的所有 getter , setter 方法将省略 get 和 set 前缀,获取属性值直接使用属性名相同的无参方法,设置属性值使用属性名相同的有参方法,并且返回值为this。如:
标注到属性上,使用 prefix 设置需要省略的属性生成 getter , setter 方法时的前缀,且属性必须为驼峰式命名。
编译之后为
在需要打印日志的类中使用,项目中使用 slf4j 、 log4j 日志框架
该注解快速判断是否为空,为空抛出 java.lang.NullPointerException 。
注解自动添加到同步机制,生成的代码并不是直接锁方法,而是锁代码块, 作用范围是方法上。
注解用于确保已分配的资源被释放( IO 的连接关闭)。
Lombok常用注解(一)@Data @RequiredArgsConstructor @NoArgsConstructor @AllArgsConstructor
@Data@Data = @ToString + @EqualsAndHashCode + @Getter?(作用在所有字段)+ @Setter(作用在所有非final的字段)+ @RequiredArgsConstructor
@RequiredArgsConstructor(包含在@Data中)
生成构造包含所有必须字段的参数,包括(1)含@NotNull注解的字段;(2)final修饰且未初始化的字段。
@NoArgsConstructor
生成无参构造
@AllArgsConstructor
生成全参构造
参考:https://projectlombok.org/features/all
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
专注于github, 有需要几千github star 出售5000多个github 账号, 需要联系V微信 eryuechanghe在Lombok中,生成构造方法的annotation一共有三个,@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsContructor。使用这三个annotation来完成项目中对于不同构造方法的需求。
@NoArgsConstructor : 生成一个无参数的构造方法,这个annotation在与其他的annotation配合起来使用的时候更加能凸显出他的重要性,例如在使用hibernate这种框架的时候,如果有一个有参数的构造方法的时候,NoArgsConstructor会展示出他的作用。
@RequiredArgsConstructor: 会生成一个包含常量,和标识了NotNull的变量 的构造方法。生成的构造方法是private,如何想要对外提供使用可以使用staticName选项生成一个static方法。
@AllArgsContructor: 会生成一个包含所有变量,同时如果变量使用了NotNull annotation , 会进行是否为空的校验, 我们来看一下 给出的一个例子:
使用了lombok
未使用lombok
@AllArgsConstructor 在生成的构造函数上会生成一@ConstructorProperties 的Java annotation, 当然也可以通过将suppressConstructorProperties 设置为true来禁用@ConstructorProperties 。 如果你知道@ConstructorProperties 是干什么用的,那么一定就知道@NoArgsConstructor为什么没有这个配置参数了。
提示一点:@ConstructorProperties 只能用在JDK 6 中
Lombok注解
作用:判断是否为空,为空自动抛出空指针异常。标注点:方法或者构造器的参数上。
示例:
编译后为
作用:用于自动生成get、set方法。Boolean类型为is开头。
标注点:字段或者类上面。作用类上面自动生成非静态字段的get和set方法。
作用:用于生成toString()方法。
配置项:
编译后为
作用:toString方法会默认忽略掉命名为$开头的变量。该注解表示生成toString方法时包含该注解标注的字段和方法,需要与onlyExplicitlyIncluded一起使用。
标注点:字段或者方法。方法是无参、非静态类型。
作用:表示生成toString方法时不包含被该注解标注的字段。那么生成toString方法时会跳过这些字段,
标注点:字段。
作用:生成hastcode和equals方法
配置项:
编译后
作用:需要与onlyExplicitlyIncluded配合使用,表示将该注解标注的内容添加到实现hashCode和equals方法的内容中去。
标注点:字段或者方法之上,
作用:用于排除不需要参与生成hashCode和equals方法的字段。可单独使用。
标注点:字段。
@NoArgsConstructor
作用:用于生成无参构造器,如果类中存在final字段,则会报编译错误。一般结合其他几个构造器注解一起使用提供一个无参构造器,并且不会检查@NonNull标注的字段。
标注点:类。
@AllArgsConstructor
作用:用于生成包含所有字段的构造器。@NonNull字段会进行null判断检查。
标注点:类
@RequiredArgsConstructor
作用:生成单参数的构造器。包含final字段和类似于@NonNull约束标注的字段,会对@NonNull字段进行明确的null检查。
标注点:类
access,同上
标注点:类
作用:@ToString,@EqualsAndHashCode、@Getter、@Setter、@RequiredArgsConstructor综合体。
标注点:类
作用:建造者模式生成对象;
标注点:常见于类上,也可方法和构造器;
参考:
[1]. https://projectlombok.org/features/all
Java springboot问题,请问如图中上下两种方式有什么区别?作用是什么?哪种方式好一点?
没什么区别,写法上的不同,哪个方便用哪个。一种是需要写@Autowired,在需要大量的mapper或者bean的时候,你同样需要写大量的@Autowired,
第二种应该是用的lombok的@RequiredArgsConstructor注解,只需要一个注解写在类上,你就不需要写那么多的@Autowired