Lombok 的@Builder 未检测 Java 记录的字段
Lombok's @Builder not detecting fields of the Java Record
我正在尝试使用 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'
}
}
当我将记录转换为 class 时,一切正常:
@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
根据 this records
支持 Lombok 版本 v1.18.20
@Builder on records is supported since the last release v1.18.20. Which version are you using?
Note that this may also be just an IDE issue. If you are using IntelliJ, it may not be supported, yet.
可能是 IntelliJ 问题...尝试在没有 IntelliJ 自动完成的情况下编写代码,看看它是否可以编译...如果可以...这是一个 IntelliJ 问题...如果没有,则有问题用你的代码。
这是一个known Intellij bug. There is, however, a workaround:
这行不通:
@Builder
public record MyRecord(String myField) {}
这样做:
public record MyRecord(String myField) {
@Builder public MyRecord {}
}
重要提示:在记录中插入@builder
后,必须删除其上方的@builder
我正在尝试使用 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'
}
}
当我将记录转换为 class 时,一切正常:
@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
根据 this records
支持 Lombok 版本 v1.18.20
@Builder on records is supported since the last release v1.18.20. Which version are you using? Note that this may also be just an IDE issue. If you are using IntelliJ, it may not be supported, yet.
可能是 IntelliJ 问题...尝试在没有 IntelliJ 自动完成的情况下编写代码,看看它是否可以编译...如果可以...这是一个 IntelliJ 问题...如果没有,则有问题用你的代码。
这是一个known Intellij bug. There is, however, a workaround:
这行不通:
@Builder
public record MyRecord(String myField) {}
这样做:
public record MyRecord(String myField) {
@Builder public MyRecord {}
}
重要提示:在记录中插入@builder
后,必须删除其上方的@builder