lombok如何给属性设置_你不得不会的Lombok全面详细讲解,全网最详细的教程

读者范围:

  • 如果你使用过Lombok你可能只使用了部分功能,那么这里列举了所有功能,你继续阅读能完善这方面的知识;
  • 如果你还没用用过,甚至不知道这是什么,那么对不起,你已经被技术淘汰了,这里有一份详尽的教程让你一次性恶补过来;

简介

Lombok是一个可以通过注解来帮助我们简化消除一些必须有但显得很臃肿的Java代码的一种工具,通过使用对应的注解,可以在编译源码的时候动态添加源码。

例如在实体中经常见到一堆Getter和Setter方法,这些方法是必要的不可缺少的,但是这些代码感觉却像是“垃圾”,看起来重复而臃肿,看起来也不美观,也不简洁清爽,可以使用lombok,在类上直接使用@Getter @Setter 这两个注解,那么代码在编译的时候会自动帮你生成这个类下的所有字段对应的Getter和Setter方法,实体中只有一些属性,看起来实体类变得简洁很多,虽然IDE可以很快的生成出来,但是生成之后的实体还是那么的臃肿,而且如果修改了字段的名称或者字段的类型还要重新生成,比较麻烦,使用Lombok就是消除一些含金量不高却必须要有的代码,使程序员看起来代码更加简洁、清爽。

Automatic Resource Management, automatic generation of getters, setters, equals, hashCode and toString, and more!

  • lombok的官方地址:https://projectlombok.org/
  • lombok的Github地址:https://github.com/rzwitserloot/lombok

Lombok plugin 插件

Intellij idea 使用Lombok需要安装插件:Lombok plugin: Preferences —> Plugins —> 搜索 Lombok plugin — > Install

同时设置 Preferences -> Compiler -> Annotation Processors -> Enable annotation processing勾选。

69a8f636acc2f799734152f03bf87bae.png

使用示例

首先引入lombok依赖

8291c60d18146f936a52815807ec3ed6.png

1. @Getter/@Setter

为字段生成Getter和Setter方法,可以注解到字段或者类上(注解在类上会为类中的所有字段生成Getter和Setter方法),默认是public类型的,如果需要的话可以修改方法的访问级别。

e06dd8a9d8664b7a75342e097a1e7d6b.png

结果解释:

id字段生成了Getter&Setter,访问修饰符是public

phone只生成了Getter方法,因为只使用了@Getter而没有使用@Setter, 并且访问修饰符是protected

password 上并没有注解,所以什么都不生成

注意:Lombok中的注解一般都会包含一个无参构造函数注解@NoArgsConstructor(用于生成无参构造函数的) ,所以还会额外生成一个无参构造函数

@Getter @Setter 注解在类上,表示为类中的所有字段生成Getter&Setter方法。

03a56c5df416f7ede11728b0b13280d3.png

2. @NonNull

为字段赋值时(即调用字段的setter方法时),如果传的参数为null,则会抛出空异常NullPointerException,生成setter方法时会对参数是否为空检查

6dfafa93e28d472a9b542b83eb5344ca.png

3. @NoArgsConstructor

生成一个无参构造方法。当类中有final字段没有被初始化时,编译器会报错,此时可用@NoArgsConstructor(force = true),然后就会为没有初始化的final字段设置默认值 0 / false / null, 这样编译器就不会报错。对于具有约束的字段(例如@NonNull字段),不会生成检查或分配,因此请注意,正确初始化这些字段之前,这些约束无效。

c3b924646edfc796ee4b2b006eaf0322.png

4. @RequiredArgsConstructor

生成构造方法(可能带参数也可能不带参数),如果带参数,这参数只能是以final修饰的未经初始化的字段,或者是以@NonNull注解的未经初始化的字段。

@RequiredArgsConstructor(staticName = “of”)会生成一个of()的静态方法,并把构造方法设置为私有的

304101943bb595fa688fe0bc75bec57c.png

必要的构造函数只会生成final修饰的未经初始化的字段或者是以@NonNull注解的未经初始化的字段, 所以生成了public User(@NonNull String phone, Integer age)构造函数

8c3a9a1d8f9e490d5ebee58007cedc03.png

5. @AllArgsConstructor

生成一个全参数的构造方法

31911c07930713453704e0a17f79ef35.png

6. @ToString

生成toString()方法,默认情况下它会按顺序(以逗号分隔)打印你的类名称以及每个字段。可以这样设置不包含哪些字段,可以指定一个也可以指定多个@ToString(exclude = “id”) / @ToString(exclude = {“id”,“name”})

如果继承的有父类的话,可以设置callSuper 让其调用父类的toString()方法,例如:@ToString(callSuper = true)

f5f4a9a8857844db42a27acbd9356f28.png
07c72591650add49a3822e8512097475.png

7. @EqualsAndHashCode

生成hashCode()和equals()方法,默认情况下,它将使用所有非静态,非transient字段。但可以通过在可选的exclude参数中来排除更多字段。或者,通过在of参数中命名它们来准确指定希望使用哪些字段。

// exclude 排除字段

@EqualsAndHashCode(exclude = {“password”, “salt”})

// of 指定要包含的字段

@EqualsAndHashCode(of = {“id”, “phone”, “password”})

207ff508276ac5e13248e607df82a92c.png
64ad47fb5f72e588cda25f9051baf8b6.png

8. @Data

@Data 包含了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能

6aaf0f048acc37927663c661ccdc9089.png

9. @Value

@Value 将字段都变成不可变类型:使用final修饰, 同时还包含@ToString、@EqualsAndHashCode、@AllArgsConstructor 、@Getter(注意只有Getter没有Setter)

e5ca6aaa3c3469835033f9a39ce63c66.png
56c6e934a8f624e3e8617eb07996a238.png

10. @Log

生成log对象,用于记录日志,可以通过topic属性来设置getLogger(String name)方法的参数 例如 @Log4j(topic = “com.xxx.entity.User”),默认是类的全限定名,即 类名.class,log支持以下几种:

@Log java.util.logging.Logger

@Log4j org.apache.log4j.Logger

@Log4j2 org.apache.logging.log4j.Logger

@Slf4j org.slf4j.Logger

@XSlf4j org.slf4j.ext.XLogger

@CommonsLog org.apache.commons.logging.Log

@JBossLog org.jboss.logging.Logger

7d9066b9593f9ad47a90f5ad02813efc.png
ab478c129c9c8babb9966efc34383521.png

11. @SneakyThrows

261634f4ef56ec38b43dcf6838f544d7.png

12. @Synchronized

给方法加上同步锁

778612dfe2458aac96f41f541dc81464.png

13. @Cleanup

主要用来修饰 IO 流相关类, 会在 finally 代码块中对该资源进行 close();

06a1811964c795e5499e29cc2587db43.png

14. @Getter(lazy = true)

@Getter(lazy = true)

标注字段为懒加载字段,懒加载字段在创建对象时不会进行初始化,而是在第一次访问的时候才会初始化,后面再次访问也不会重复初始化

0492f99070d2a1ffd78696ccdebb83d7.png
9b1e45e1feb0e14b70ed37f43434f753.png
558ac4cb5a4b82f7b3951706474859df.png

15. @Wither

提供了给final字段赋值的一种方法

d38a7f45b344225ae755d0b777868ae5.png

16. @Builder

@Builder注释为你的类生成复杂的构建器API。

3ca39640623a07b22788d780a68ecbf3.png

17. @Delegate

为List类型的字段生成一大堆常用的方法,其实这些方法都是List中的方法

注意:一个类中只能使用一个@Delegate注解,因为使用多个会生成多个size()方法,从而会编译报错。

ad66d0bffa5507c2e89acd784ef9673d.png

lombok.config

lombok.config配置文件是通过一些设置来控制代码生成的规则或者称之为习惯,配置文件的位置应放在src/mian/java,不要放置在src/main/resources。

注意配置文件和要使用注解的类要在同一套代码中,要么同时在src/main/java 要么同时在 src/test/java中

lombok.config

bdfd479512ac429df1a47cf88ea1e570.png
189ff56e0674d212d7dba68357c43140.png
  • 如果认为写的还可以请点个赞,我将继续努力
  • 如果您没有时间看可先收藏或者转发
9d16dc9b714c16f55a5f559b78eed75c.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值