![0d95f0a022d56bf9ecd16c9525c761b5.png](https://i-blog.csdnimg.cn/blog_migrate/b28a592ca9cd8dce8c545c9322918959.jpeg)
Lombok到底是什么
先看一下它的官网
![b880553860260bdc86aa0d1d0668d67a.png](https://i-blog.csdnimg.cn/blog_migrate/29aadb37a8bdecac6fd2a7b9e6873624.jpeg)
英语懒得看?没关系。
它大致意思是:Lombok是一个很牛批的插件(本质是个Java库),项目里一旦引入了Lombok神器之后,你项目中所有诸如:对象的构造函数、 equals()方法,属性的 get()/set()方法等等,这些没有技术含量的代码统统都不用写了,Lombok帮你搞定一切,全部帮你自动生成!
听起来好像是挺不错...
![6793e00e4315694d18864582bf2141ff.png](https://i-blog.csdnimg.cn/blog_migrate/b18a9ae449943e54e292e45d20760817.jpeg)
眼见为虚,代码为实,本文亲自尝试一下!
项目中引入Lombok
首先在项目的 pom.xml中引入 Lombok依赖:
![68b1337628c04e3d91c8e7a31e9ea256.png](https://i-blog.csdnimg.cn/blog_migrate/d9962b0344ca2423b201d8fa0856715a.jpeg)
除此之外,还要在IDE中安装Lombok插件,并配置:
![bf5a3e99425f9c4a822ee9c4dd1ce94b.png](https://i-blog.csdnimg.cn/blog_migrate/862b769c6d3792f228144a3e47b0a6f5.jpeg)
接下来进行代码实验。
爽!get/set不用写了
以前我们写一个 POJO对象时,比如定义一个课程 Course,需要自己手动写上每个字段的 get()和 set()方法,就像这样:
![b16941be3752b6d17bc4bda25aa30e54.png](https://i-blog.csdnimg.cn/blog_migrate/76d2ea9f1db67cd7fb1cdc8c640dc376.jpeg)
但是借助于Lombok,一切都变得优雅起来,代码篇幅省了一半
![6a22414a8286d8ccb4bdf8f8c634905c.png](https://i-blog.csdnimg.cn/blog_migrate/554e4568928e119b9493b154b305c3da.jpeg)
两个注解: @Getter和 @Setter即可方便搞定。
爽!new对象变得优雅了
在没有用Lombok之前,我们假如想new一个对象,我们往往会这么做(以上面的 Course类为例):
![cbd5d29cf618992934925107884fbdfa.png](https://i-blog.csdnimg.cn/blog_migrate/8445ffc17770f43cd68170d2ceb49a07.jpeg)
引进Lombok之后,我们只需要在 Course类上用上 @Builder注解:
![ad3a74e8eb2357d152cc7ee253eb2daf.png](https://i-blog.csdnimg.cn/blog_migrate/a814b3625ac381a560c8fec9bd5249ea.jpeg)
则 Course类对象的创建即可使用 链式表达 的方式一行代码完成:
![0b22e5f9e0ebb96c3e8e23c2037b5772.png](https://i-blog.csdnimg.cn/blog_migrate/5674db7e6d9aa660893cd7ff874bd0fd.jpeg)
看到这里,如果你学过设计模式中的 “建造者模式” 的话,一定能猜到 @Builder注解就是一个典型的“建造者模式”的实现案例!
建造者模式的链式调用用起来实在是很爽!
爽!构造函数不用写了
一、全参构造器不用写了
当你在你的类上使用了Lombok的注解 @AllArgsConstructor时:
![f1c0a0c7663a9ef032f614ad302c77d5.png](https://i-blog.csdnimg.cn/blog_migrate/3985ae908068567d9db77b8081a4f1e6.jpeg)
这时候你的类在编译后会自动生成一个全参构造函数,就像这样:
![62a21f2b8146b378d810da748374fce8.png](https://i-blog.csdnimg.cn/blog_migrate/d4c7b17be3ffaaaef0d4ca1f3ca6ae7e.jpeg)
二、无参数构造器也不用写了
当你在你的类上使用了Lombok的注解 @NoArgsConstructor时:
![60194c25279004114edb6d69500a7d0d.png](https://i-blog.csdnimg.cn/blog_migrate/ae250a0e8650eaeb7045967206c84d9a.jpeg)
这时候你的类在编译后会自动生成一个无参构造函数,就像这样:
![e8fe8dce0e3bd66f3361ec441b8e70cf.png](https://i-blog.csdnimg.cn/blog_migrate/de7bc8998190282c362532662e5d3fb1.jpeg)
三、部分参数构造器也不用写了
当你在你的类上使用了Lombok的注解 @RequiredArgsConstructor时:
![790521d74814dc25c88399665ee48065.png](https://i-blog.csdnimg.cn/blog_migrate/02a721a72185d6a4efe5d2504b899b48.jpeg)
这时候你的类在编译后会自动生成一个具备部分参数的构造函数,就像这样:
![3cd4406715ab08d2b0bc9832d713fb37.png](https://i-blog.csdnimg.cn/blog_migrate/31c92723e029a69e6b3a1c1baaf621cd.jpeg)
因为 name字段定义成 final,所以 Lombok自动会帮你生成一个部分参数的构造器!!
爽!null判空不用写了
Lombok的 @NonNull注解可以自动帮我们避免空指针判断。该注解作用在方法参数上,用于自动生成空值参数检查,比如:
![45d27ba55ec3bd753b4b7bc22e1792da.png](https://i-blog.csdnimg.cn/blog_migrate/eeb94a5152fac54c4e53d477168b9382.jpeg)
但是有了Lombok之后,事情就变得简单了,一个注解搞定:
![38e9af1cda344e3dc66f426e01340e7f.png](https://i-blog.csdnimg.cn/blog_migrate/d0e0b2f3fd2a513946b81aba92e6b28f.jpeg)
爽!屁股不用擦了
什么意思呢?
假如我们要读取一个 txt文本文件,一般会这样写代码:
![26e961b9b69d8fb2f422c37201d9681c.png](https://i-blog.csdnimg.cn/blog_migrate/fea786dbcaf5bc16234fef10bf18eb50.jpeg)
注意,这个文件句柄在使用完成之后是一定要手动 close的,否则就有可能资源泄漏。
有了Lombok之后,这种擦屁股活儿统统不用干了,一个 @Cleanup注解即可搞定
![b90120e43fe507301cf6198331a61247.png](https://i-blog.csdnimg.cn/blog_migrate/31a81588778c43c1582cd0c6ca852077.jpeg)
爽!异常捕捉不用写了
比如我们打开一个 txt文本文件:
![17347ebe15ef4ad9edc30d804b0e3453.png](https://i-blog.csdnimg.cn/blog_migrate/0670851c2909bb856eff04fb36375c4f.jpeg)
这地方的 FileNotFoundException异常,要么显式地在函数级抛出,要么就像上面一样 try/catch内部消灭。
如果在编码时,不想处理这种繁杂的异常处理,你可以使用Lombok的 @SneakyThrows注解进行简化,比如上面的代码就可以简化为:
![954ffb05a276c9ef856c2bf2dd09aef9.png](https://i-blog.csdnimg.cn/blog_migrate/ac385600c9bf0b9cc0f815869b50f75f.jpeg)
这样你编码时就无需处理异常了。
必须友情提示的是:这样写你是爽了,但你很有可能会被队友一顿暴打,因为别人调用你编写的函数,并不能显式的获知需要处理哪些异常,这样容易留坑!
![2426f0046bb941f1b4a43bb81b8e8d5e.gif](https://i-blog.csdnimg.cn/blog_migrate/af28e4a157ce0b0606c6c81e1e554f1a.gif)
还有很多
好了,受限于篇幅限制,抛砖引玉就到这里了。
上面列举了几个平时项目开发中使用非常频繁的Lombok注解,除此之外,还有诸如像:
- @ToString:为类自动生成toString()方法
- @EqualsAndHashCode:为类自动生成hashCode和equals实现
- @Log:为类自动生成log日志记录
- @Synchronized:为类方法或实例方法自动生成synchronized保护
等工具也是非常好用的,大家可以尝试在项目里用起来。
从此,代码5分钟,划水2小时不是梦。。。
![4cf01e2683c5fa84a4055adef7f97e5e.png](https://i-blog.csdnimg.cn/blog_migrate/714823a6fcfbf92e9c153b9ad34efa27.jpeg)
每天进步一点点!Peace!