什么是lombok
Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。
对lombok不熟悉的朋友,可以阅读一下官方文档,再来看本文。官方文档如下
https://projectlombok.org/
我们先来看一个小例子

提问: main函数会输出什么?
答案:空指针异常
回答出正确答案的朋友,下文基本上可以不用看了。可能有些朋友会有疑问,我例子中明明使用了
为什么还会报空指针?
真相就在lombok用@builder生成的class文件中,我们看下使用@builder,生成的class文件反编译后长啥样
看到我圈红起来的,大家应该就一目了然。原来当我们用
时,此时user对象中的positionList就会被userBuilder中的positionList覆盖,而userBuilder中的positionList是null
方法一:positionList前面加上final修饰
此时用@Budiler生成class为
此时user对象中的positionList用的还是原先的positionList,因此不会出现空指针异常
方法二:positionList前面加上@Builder.Default注解
当positionList$set为false,会给userBuilder的positionList赋值为
因此当user对象中的positionList被userBuilder中的positionList覆盖后,userBuilder中的positionList是new ArrayList(),此时就不会出现空指针现象
方法三:不用build实例化对象
把
改成用
很多时候没那么多的想当然