MCHAppy
MCHAppy

Reputation: 1002

Builder design pattern : Required attributes

Is it important to define required attributes on the builder as final ? ( code performance )

This is an example illustrating my question :

public class User {
private final String firstName; // required
private final String lastName; // required
private final int age; // optional
private final String phone; // optional
private final String address; // optional

private User(UserBuilder builder) {
    this.firstName = builder.firstName;
    this.lastName = builder.lastName;
    this.age = builder.age;
    this.phone = builder.phone;
    this.address = builder.address;
}

public String getFirstName() {
    return firstName;
}

public String getLastName() {
    return lastName;
}

public int getAge() {
    return age;
}

public String getPhone() {
    return phone;
}

public String getAddress() {
    return address;
}

public static class UserBuilder {
    private final String firstName; // required
    private final String lastName;  // required
    private int age;
    private String phone;
    private String address;

    public UserBuilder(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public UserBuilder age(int age) {
        this.age = age;
        return this;
    }

    public UserBuilder phone(String phone) {
        this.phone = phone;
        return this;
    }

    public UserBuilder address(String address) {
        this.address = address;
        return this;
    }

    public User build() {
        return new User(this);
    }

}
}

Upvotes: 1

Views: 119

Answers (1)

Andrés Oviedo
Andrés Oviedo

Reputation: 1428

The short answer is "Usually not".

You should use final based on clear design and readability rather than for performance reasons.

Does use of final keyword in Java improve the performance?

Upvotes: 1

Related Questions