添加@NoArgsConstructor注解提示变量'xxx'可能未被初始化如何解决?
报错原因
你类中的所有成员变量均使用final修饰,Java语法要求final修饰的成员变量必须完成显式初始化后才能使用,初始化的途径包含三种:
- 变量声明时直接赋值
- 构造代码块中赋值
- 类的构造方法内赋值
而@NoArgsConstructor注解默认生成的是空实现的无参构造方法,没有对这些final变量执行赋值操作,因此编译器会抛出「变量可能未初始化」的错误。
解决方案
根据你的业务需求可以选择两种处理方案:
方案1:保留字段的final不可变特性
将@NoArgsConstructor注解修改为@NoArgsConstructor(force = true)即可。
开启force参数后,Lombok会自动为所有final字段赋予对应类型的默认初始值(引用类型为null、基础类型为0/false等),满足编译器的初始化校验要求。
补充说明:你当前的类标注了
@Entity属于JPA实体类,JPA规范要求实体类必须提供无参构造方法,这个自动生成的无参构造仅供给JPA框架反射实例化对象使用,你业务代码中正常调用自定义的带参构造创建对象即可,不会出现字段为空的业务问题。
方案2:不需要强制字段不可变
直接移除所有成员变量前的final修饰符即可,此时默认生成的无参构造方法不会触发初始化报错。
内容的提问来源于stack exchange,提问作者Marquez Ludin Albarado Jaimes
相关产品推荐
相关产品推荐

