前言什么是lombokLombok项目是一个自动插入到编辑器和构建工具中的Java库。Lombok提供了一组有用的注释来消除Java类。大量样板代码。对lombok不熟悉的朋友可以看一下官方文档再看这篇文章。官方文档如下https://projectlombok.org/文我们先看一个小例子,提出问题:main函数会输出什么?答案:空指针异常com.github.lybgeek.msg.test.User.addPositionList(User.java:25)com.github.lybgeek.msg.test.User线程“主”java.lang.NullPointerException中的异常。Main(User.java:30)回答正确的同学,下面基本可以跳过看。可能有些朋友会有疑惑。在我的示例中,我清楚地使用了privateListpositionList=newArrayList<>();为什么它仍然报告空指针?真相就在lombok使用@builder生成的class文件中。看看使用@builder反编译后生成的class文件是什么样子的。你应该能看到我圈子里的红圈。原来,当我们使用Useruser=User.builder().username("张三").build();时,user对象中的positionList会被userBuilder中的positionList覆盖,userBuilder中的positionList为null如何解决方法一:在positionList前面加上final修饰。会出现空指针异常。方法二:在positionList前面加上@Builder.Default注解@Builder.Default。用户名;私有布尔positionList$set;私有列表positionList;UserBuilder(){}publicUser.UserBuilderusername(finalStringusername){this.username=username;归还这个;}publicUser.UserBuilderpositionList(finalListpositionList){this.positionList=positionList;this.positionList$set=true;归还这个;}publicUserbuild(){ListpositionList=this.positionList;如果(!this.positionList$set){positionList=User.$default$positionList();}returnnewUser(this.username,positionList);当positionList$set为false时,userBuilder的positionList会被赋值为User.$default$positionList();即:privatestaticList$default$positionList(){returnnewArrayList();}因此当user对象中的positionList被userBuilder中的positionList覆盖时,userBuilder中的positionList为newArrayList(),此时不会出现空指针现象。方法三:实例化对象不构建Useruser=User.builder().username("张三").build();更改为用户user=newUser();user.setUsername("张三");user.addPositionList("经理");综上,很多时候没有那么多想当然