Lombok 的 @Builder 未检测到 Java 记录的字段

问题描述 投票:0回答:3

我正在尝试使用 Lombok 的 @Builder 实现构建器模式,但它没有检测到任何记录字段:

@Builder(builderMethodName = "internalBuilder")
public record ApiError(String title, Map<String, String> errors) {

    public static ApiErrorBuilder builder(String title) {
        return internalBuilder().title(title); // Cannot resolve method 'title' in 'ApiErrorBuilder'
    }
}

当我将记录转为课程时,一切都按预期进行:

@Builder(builderMethodName = "internalBuilder")
public class ApiError {

private final String title;
private final Map<String, String> errors;

    public ApiError(String title, Map<String, String> errors) {
        this.title = title;
        this.errors = errors;
    }

    public static ApiErrorBuilder builder(String title) {
        return internalBuilder().title(title);
    }

    // getters

}

发生这种情况是因为 Lombok 目前还不能很好地处理记录吗?

我正在使用 IntelliJ 和 Lombok 1.18.22

java lombok intellij-lombok-plugin
3个回答
44
投票

修复后

又可以用了!

@Builder
public record MyRecord(String myField) {
}

预修复

这是一个已知 IntelliJ 错误。然而,有一个解决方法

public record MyRecord(String myField) {
    @Builder public MyRecord {}
} 

重要:将

@builder
插入记录后,必须删除其上方的
@builder


12
投票

根据this

records
从Lombok版本开始支持
v1.18.20

自上次版本 v1.18.20 起支持记录上的 @Builder。您使用的是哪个版本? 请注意,这也可能只是 IDE 问题。如果您使用 IntelliJ,可能尚不支持。

可能是 IntelliJ 问题...尝试在没有 IntelliJ 自动完成功能的情况下编写代码,看看它是否可以编译...如果可以...则为 IntelliJ 问题...如果没有,则您的代码有问题。


7
投票

这是一个 IntelliJ 问题。 升级 IntelliJ 版本解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.