Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lombok @SuperBuilder doesn't accept parameters

Tags:

java

lombok

Assuming two simple classes:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Party {

    protected Long id;
    protected String status;
}
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class Person extends Party {

    private String name;
    private Long sex;
}

The compilation fails on the following error. Upon reading Lombok | @SuperBuilder I have no idea what I could miss.

C:\Dev\companyproject\src\main\java\com\companyproject\entity\Person.java:12
java: type com.companyproject.entity.Party.PartyBuilder does not take parameters
like image 305
Nikolas Charalambidis Avatar asked Dec 06 '25 13:12

Nikolas Charalambidis


1 Answers

The issue here is the incorrect @Builder annotation on the parent class. The documentation for @SuperBuilder mentions:

Most importantly, it requires that all superclasses also have the @SuperBuilder annotation.

So the correct parent class would be:

@Data
@SuperBuilder     // <- annotation replaced here
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Party {

    protected Long id;
    protected String status;
}

Addendum:

A key difference between both annotations is that @SuperBuilder also creates a constructor of the class expecting a corresponding builder argument.

For Party it would look like:

protected Party(PartyBuilder<?, ?> b) {
    this.id = b.id;
    this.status = b.status;
}

and for Person:

protected Person(PersonBuilder<?, ?> b) {
    super(b);
    this.name = b.name;
    this.sex = b.sex;
}

As you can see, the child class constructor wants to pass its own builder to the parent class constructor and this will only be possible if there is a matching constructor there, and @Builder wouldn't generate it.

Also PersonBuilder<> extends PartyBuilder<>, that is why calling super with the child type builder works fine here.

like image 143
Tom Avatar answered Dec 09 '25 03:12

Tom



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!