import lombok.Builder; @Builder class BuilderCustomConstructor { public static @java.lang.SuppressWarnings("all") interface NameDef { public SurnameDef name(final String name); } public static @java.lang.SuppressWarnings("all") interface SurnameDef { public OptionalDef surname(final String surname); } public static @java.lang.SuppressWarnings("all") interface OptionalDef { public BuilderCustomConstructor build(); } private static @java.lang.SuppressWarnings("all") class $Builder implements NameDef, SurnameDef, OptionalDef { private String name; private String surname; public SurnameDef name(final String name) { this.name = name; return this; } public OptionalDef surname(final String surname) { this.surname = surname; return this; } public BuilderCustomConstructor build() { return new BuilderCustomConstructor(this); } private $Builder() { super(); } } private final String name; private final String surname; private BuilderCustomConstructor(final $Builder builder) { super(); this.name = builder.name.trim(); this.surname = builder.surname.trim(); } public static @java.lang.SuppressWarnings("all") NameDef builderCustomConstructor() { return new $Builder(); } }