Ho utilizzato il pattern Builder per creare oggetti con un numero elevato di attributi, in cui la maggior parte di essi è facoltativo. Ma fino ad ora, li ho definiti come finali, come raccomandato da Joshua Block e altri autori, e non ho avuto bisogno di cambiare i loro valori.
Mi chiedo cosa devo fare se ho bisogno di una classe con un numero considerevole di attributi facoltativi ma non definitivi (mutevoli)?
Il codice del pattern di My Builder è simile a questo:
public class Example {
    //All possible parameters (optional or not)
    private final int param1;
    private final int param2;
    //Builder class
    public static class Builder {
        private final int param1; //Required parameters
        private int param2 = 0;   //Optional parameters - initialized to default
        //Builder constructor
        public Builder (int param1) {
            this.param1 = param1;
        }
        //Setter-like methods for optional parameters
        public Builder param2(int value)
        { param2 = value; return this; }
        //build() method
        public Example build() {
            return new Example(this);
        }
    }
    //Private constructor
    private Example(Builder builder) {
        param1 = builder.param1;
        param2 = builder.param2;
    }
}
 Posso semplicemente rimuovere la parola chiave   final    dalla dichiarazione per poter accedere agli attributi esternamente (tramite setter normali, ad esempio)? Oppure esiste un modello creativo che consente attributi opzionali ma non finali che sarebbero più adatti in questo caso?