How to make private builder() method with lombok

cgtdnpck :

I’m using lombok @Builder. When I place @Builder annotation on the MyExample class, @Builder generates public builder() method. But I want to make private builder() method. Unfortunately @Builder annotation does not have access option. How should I do?

Benny Bottema :

You can overwrite the generated builder method to make it private. As far as I know, that's the only way:

@Builder
public static class Foo<F, T> {

    // hide lombok's builder method:
    private static FooBuilder builder() {
        return new FooBuilder();
    }

}

However, this enables you to do some more advanced initialization of the builder. For example, you can initialize the builder with some defaults and also kickstart the builder with initial user-supplied values.

Here's an example:

@Builder
public static class Car {

    // kickstart builder method available to user
    public static CarBuilder builder(String brand, String model) {
        return builder().brand(brand).model(model);
    }

    // hide lombok's own builder method and apply some defaults:
    private static CarBuilder builder() {
        return new CarBuilder().color(System.getenv("DEFAULT_CAR_COLOR"));
    }

}

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=462406&siteId=1
Recommended