I am trying to implement the builder pattern using Lombok's @Builder but it does not detect any of the record fields:
@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'
}
}
When I turn record to a class, everything works as expected:
@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
}
Is this happening because Lombok currently does not work well with records yet?
I am using IntelliJ and Lombok 1.18.22
Re-index your Maven project; make sure auto import is turned on. Check External Libraries in the left Project tab to make sure that Lombok appears. Close the project and re-open if there's any red in the Maven tab on the right.
To create a record, call its constructor and pass all the field information in it. We can then get the record information using JVM generated getter methods and call any of generated methods.
In Java, a record is a special type of class declaration aimed at reducing the boilerplate code.
It is a known Intellij bug. There is, however, a workaround:
This doesn't work:
@Builder
public record MyRecord(String myField) {}
This does:
public record MyRecord(String myField) {
@Builder public MyRecord {}
}
Important: Once you insert the @builder
inside the record, you must remove the @builder
above it
According to this records
are supported from Lombok version 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.
Probably an IntelliJ issue ... try writing the code without IntelliJ auto-complete, see if it compiles ... if it does ... its an IntelliJ issue ... if it does not, something is wrong with your code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With