title: Builder design pattern : Required attributes
body: <p>Is it important to define required attributes on the builder as <code>final</code>  ? 
  ( code performance )</p>
  
  <p>This is an example illustrating my question : </p>
  
  <pre><code>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);
      }
  
  }
  }
  </code></pre>