长大后想做什么?做回小孩!

0%

优雅编程(一)——Lombok

最初学习java时候,手写一个个的pojo类及其getter、setter、toString。。。逐渐的熟练之后感觉这样的方式很机械,于是发现各大IDE就提供了快捷键创建这些内容(idea的ALT+INS、MyEclipse的ALT+Shift+s),从这时候开始逐渐深感IDE之便捷;但是在不断地学习生活中开始厌倦这种存在“居然要按下三四次快捷键才能生产代码!每当类中属性发生变化时还要手动去修改对应方法!”等等“不便”因素的笨重方法,于是Lombok就诞生了。

正文

Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。

Lombok提供了很多注解,帮我们省去了很多代码量(例如getter、setter。。。)同时可以自动化日志变量。官网链接

简而言之:Lombok是能以简单的注解形式来简化java代码,提高开发人员的开发效率的语法糖!

怎么使用lombok?

首先安装lombok plugin:

MrCN38.md.png

设置enable注解处理器,否则编译时可能出错:

MrCt9f.md.png](https://imgchr.com/i/MrCt9f)

项目中添加依赖,maven项目为例:

1
2
3
4
5
6
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>

Lombok主要注解

  • @Getter and @Setter / 自动为属性提供 Set和Get 方法
  • @ToString / 该注解的作用是为类自动生成toString()方法
  • @EqualsAndHashCode / 为对象字段自动生成hashCode和equals实现
  • @RequiredArgsConstructor / 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。
  • @AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor / 顾名思义,为类自动生成对应参数的constructor
  • @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog / 自动为类添加对应的log支持
  • @Data / 自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter,为非final字段添加@Setter,和@RequiredArgsConstructor,本质上相当于几个注解的综合效果
  • @NonNull / 自动帮助我们避免空指针。作用在方法参数上的注解,用于自动生成空值参数检查
  • @Cleanup / 自动帮我们调用close()方法。作用在局部变量上,在作用域结束时会自动调用close方法释放资源

这些注解都有一些可选参数,都比较简单易懂,就不记录了

举例:

最常见常用的就是实体类的创建了,大量没有特殊需求的Getter、Setter方法如果堆积在代码中实在是臃肿:

MrZLB8.md.png

从方法视图可以看到,与注解对应的方法已经存在了,根据属性的修改变化,方法也会自动做出调整。

还有另一大应用场景,就是可以注解生成日志:

1
2
3
4
5
6
7
8
9
10
11
12
@SpringBootTest
@Slf4j//直接使用log进行日志记录,lombok帮我们自动创建Logger对象
class estSlf4jApplicationTests {
@Test
void demo(){
for(int i=0;i<10;i++){
log.info("info....lobok");
log.warn("warn....lobok");
log.error("error....lobok");
}
}
}

优缺点:

优点:

  1. 能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率。
  2. 让代码变得简洁,不用过多的去关注相应的方法。
  3. 属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等。

缺点:

  1. 不支持多种参数构造器的重载。
  2. 虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度。有时可以通过给getter/setter加一点点业务代码,能极大的简化某些业务场景的代码。
  3. 要依赖插件的支持,最不能忍受的!!!

Lombok有它的得天独厚的优点,也有它避之不及的缺点,熟知其优缺点,在实战中灵活运用才是王道。任何技术的学习和使用都要讲求一个灵活运用!


Lombok的功能还有很多很多,博主浅尝辄止,但是在后续的学习中还会不断地完善和熟练对其的使用。