Смысл паттерна Builder - почти всегда возвращать неизменный объект из объекта Builder, который по своей природе изменчив. Помощник stati c, на который вы ссылаетесь, - это метод фабрики шаблонов Builder, используемый для создания объекта User. Вам не нужно создавать сеттер для пользователя, вместо этого пользователь не должен определяться с @Data.
Если вам нужно вызвать какой-либо метод после создания объекта User или Employee, просто добавьте функцию в соответствующий класс и вызовите ее после создания. Скрытие работы внутри конструктора, кроме инициализации членов класса, может быть опасным, потому что вы скрываете функциональность и если это закрытый метод, функциональность не может быть переопределена.
@SuperBuilder(toBuilder = true)
public static class Teacher extends User {
}
@AllArgsConstructor
@SuperBuilder(toBuilder = true)
public static class User implements Employee {
private final String username;
private final String password;
}
public static void main(String[] args) {
Teacher teacher = Teacher.builder()
.username("username").password("pwd").build();
System.out.println(teacher.toString());
}
interface Employee {
}