How to create a class by Builder pattern like this
new User.Builder() .setFirstName("Leonardo") .setLastName("da Vinci") .setAge(67) .create();
Create Model
public class User { private String firstName; private String lastName; private int age; }
Add Builder
public class User { ... static class Builder { private String firstName; private String lastName; private int age; public Builder setFirstName(final String firstName) { this.firstName = firstName; return this; } public Builder setLastName(final String lastName) { this.lastName = lastName; return this; } public Builder setAge(final int age) { this.age = age; return this; } public User create() { // Uses constructor from User class and returns the User object — here is the place where our mess is kept hidden. return new User(this); } } }
Add constructor
public class User { ... // User constructor is private, so it can’t be accessed from the other class and we must use Builder to create new object private User(final Builder builder) { firstName = builder.firstName; lastName = builder.lastName; age = builder.age; } ... }
Make parameters required
... public User create() { User user = new User(firstName, lastName, age); if (user.firstName.isEmpty()) { throw new IllegalStateException( "First name can not be empty!"); } return user; } ...
Tip: Auto generate Builder by IntelliJ
All you need to do is place the caret on the constructor in your class and choose Refactor -> Replace Constructor with Builder on the context menu. Builder class with all the methods will be auto generated, ready for use.
Leave a Reply