龙目岛@Builder未检测到 Java 记录的字段

2022-09-04 07:44:26

我正在尝试使用龙目岛的@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

}

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

我正在使用IntelliJ和龙目岛1.18.22


答案 1

这是一个已知的 Intellij 错误。但是,有一种解决方法

这不起作用:

@Builder
public record MyRecord(String myField) {}

这样做可以:

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

重要提示:在记录内插入后,必须删除其上方的@builder@builder


答案 2

支持龙目岛版本recordsv1.18.20

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

可能是IntelliJ问题...尝试在没有IntelliJ自动完成的情况下编写代码,看看它是否编译...如果确实如此...这是一个IntelliJ问题...如果没有,则说明您的代码有问题。


推荐