Estoy tratando de implementar el patrón de construcción usando @Builder de Lombok pero no detecta ninguno de los campos de registro:
@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' } }Cuando convierto el registro en una clase, todo funciona como se esperaba:
@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 }¿Esto sucede porque actualmente Lombok aún no funciona bien con los registros?
Estoy usando IntelliJ y Lombok 1.18.22
Es un error conocido de Intellij. Sin embargo, hay una solución alternativa :
Esto no funciona:
@Builder public record MyRecord(String myField) {}Esto hace:
public record MyRecord(String myField) { @Builder public MyRecord {} } Importante : una vez que inserte el @builder dentro del registro, debe eliminar el @builder que se encuentra encima.
Según esto , los records son compatibles con la versión v1.18.20 de Lombok.
@Builder en registros es compatible desde la última versión v1.18.20. ¿Qué versión está utilizando? Tenga en cuenta que esto también puede ser solo un problema de IDE. Si está utilizando IntelliJ, es posible que aún no sea compatible.
Probablemente sea un problema de IntelliJ... intente escribir el código sin el autocompletado de IntelliJ, vea si compila... si lo hace... es un problema de IntelliJ... si no lo hace, algo anda mal con su código.