使用Lombok @RequiredArgsConstructor时遇“预期0参数却传入3个”错误如何修复?
解决Lombok @RequiredArgsConstructor构造器参数不匹配问题
问题原因
@RequiredArgsConstructor的作用是生成包含final字段和未声明初始值的非final字段的构造函数。你遇到的"Expected 0 arguments but found 3"错误,要么是IDE未正确识别Lombok生成的构造器,要么是你传入的参数数量/类型和Lombok实际生成的构造器不匹配。
解决方案
1. 确保Lombok版本兼容Java 17
Java 17需要Lombok 1.18.22及以上版本,更新你的依赖配置:
- Maven:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency>
- Gradle:
compileOnly 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30' testCompileOnly 'org.projectlombok:lombok:1.18.30' testAnnotationProcessor 'org.projectlombok:lombok:1.18.30'
2. 配置IntelliJ IDEA支持Lombok
- 打开
Settings > Plugins,搜索并启用Lombok插件。 - 打开
Settings > Build, Execution, Deployment > Compiler > Annotation Processors,勾选Enable annotation processing。 - 重启IDEA,让配置生效。
3. 精确控制构造器参数
如果你的测试类需要传入3个参数(比如title、content、author),可以通过以下方式让@RequiredArgsConstructor生成对应构造器:
方式一:给目标字段添加@NonNull注解
@Entity @Getter @Setter @RequiredArgsConstructor @Table(name = "article", schema = "chitchat") public class Article { // 其他字段保持不变 @NonNull @Column(name = "title", nullable = false, length = 150) private String title; @NonNull @Column(name = "content", nullable = false, length = 50000) private String content; @NonNull @OneToOne(optional = false, orphanRemoval = true) @JoinColumn(name = "author_id", nullable = false) private User author; // 给不需要纳入构造器的字段添加默认值 @Column(name = "comment_count", nullable = false) private int commentCount = 0; @Column(name = "view_count", nullable = false) private int viewCount = 0; @NonNull @Column(name = "creation_date", nullable = false) private LocalDateTime creationDate = LocalDateTime.now(); }
方式二:将目标字段设为final
@Entity @Getter @Setter @RequiredArgsConstructor @Table(name = "article", schema = "chitchat") public class Article { // 其他字段保持不变 @Column(name = "title", nullable = false, length = 150) private final String title; @Column(name = "content", nullable = false, length = 50000) private final String content; @OneToOne(optional = false, orphanRemoval = true) @JoinColumn(name = "author_id", nullable = false) private final User author; }
4. 修复IDE缓存问题
如果配置正确仍报错,执行以下操作:
- 点击
Build > Rebuild Project重新编译。 - 点击
File > Invalidate Caches...,勾选清除文件系统缓存,重启IDEA。
内容的提问来源于stack exchange,提问作者Pogryziony
相关产品推荐
相关产品推荐

