Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

lombok call child class function for default builder

I have 2 classes, where parent needs some property from child class while building. Is there a way to support this using lombok builders?

Parent.java

import lombok.Builder;
import lombok.Getter;
import lombok.experimental.SuperBuilder;

@Getter
@SuperBuilder
public abstract class Parent {
    @Builder.Default
    private String requestType = getRequestTypeFromSubclass();
    abstract String getRequestTypeFromSubclass();
}

Child.java

import lombok.Builder;
import lombok.Getter;
import lombok.experimental.SuperBuilder;

import java.util.List;

@Getter
@SuperBuilder
public class Child extends Parent {
    @Override
    String getRequestTypeFromSubclass() {
        return "Child1";
    }
}

The above fails in compilation with message

error: non-static method getRequestType() cannot be referenced from a static context @SuperBuilder

like image 524
best wishes Avatar asked Dec 05 '25 05:12

best wishes


1 Answers

As suggested in Baeldung use toBuilder=true and remove @Builder.Default

import lombok.Getter;
import lombok.experimental.SuperBuilder;

@Getter
@SuperBuilder(toBuilder=true)
public abstract class Parent {

    private String requestType = getRequestType();
    abstract String getRequestType();
}

With this, we can get rid of the double initialization

Change calling builder using toBuilder, Child:

import lombok.Getter;
import lombok.experimental.SuperBuilder;
@Getter
@SuperBuilder
public class Child extends Parent {
    @Override
    String getRequestType() {
        return "Child1";
    }
    public static void main(String[] args) {
        Child child = Child.builder().build();
        System.out.println(child.getRequestType());
    }
}
like image 147
user7294900 Avatar answered Dec 07 '25 21:12

user7294900



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!