Im having difficulties to figure out how to change some field in a object created by builder pattern: for example this is the class
public class Pizza {
  private int size;
  private boolean cheese;
  private boolean pepperoni;
  private boolean bacon;
  public static class Builder {
    //required
    private final int size;
    //optional
    private boolean cheese = false;
    private boolean pepperoni = false;
    private boolean bacon = false;
    public Builder(int size) {
      this.size = size;
    }
    public Builder cheese(boolean value) {
      cheese = value;
      return this;
    }
    public Builder pepperoni(boolean value) {
      pepperoni = value;
      return this;
    }
    public Builder bacon(boolean value) {
      bacon = value;
      return this;
    }
    public Pizza build() {
      return new Pizza(this);
    }
  }
  private Pizza(Builder builder) {
    size = builder.size;
    cheese = builder.cheese;
    pepperoni = builder.pepperoni;
    bacon = builder.bacon;
  }
}
and Pizza obect is created like this:
Pizza pizza = new Pizza.Builder(12)
                       .cheese(true)
                       .pepperoni(true)
                       .bacon(true)
                       .build();
now what I'm trying to find out is how to change in this object for example cheese field to false? I don't have getters and setters, I know I can use reflection but it makes code harder to read and understand. So is builder pattern useful to not final objects ?
 
     
     
     
    