Getter e setter vengono utilizzati per proteggere i dati, in particolare durante la creazione di classi.
Per ogni variabile di istanza, un metodo getter restituisce il suo valore mentre un metodo setter imposta o aggiorna il suo valore. Detto questo, getter e setter sono noti anche come accessors e mutatori , rispettivamente.
Per convenzione, i getter iniziano con la parola "get" e i setters con la parola "set", seguita dal nome di una variabile. In entrambi i casi la prima lettera del nome della variabile è maiuscola:
public class Vehicle { private String color; // Getter public String getColor() { return color; } // Setter public void setColor(String c) { this.color = c; } }
Il metodo getter restituisce il valore dell'attributo. Il metodo setter prende un parametro e lo assegna all'attributo.
Una volta definiti getter e setter, li utilizziamo nel nostro main:
public static void main(String[] args) { Vehicle v1 = new Vehicle(); v1.setColor("Red"); System.out.println(v1.getColor()); } // Outputs "Red"
Getter e setter consentono il controllo sui valori. È possibile convalidare il valore dato nel setter prima di impostare effettivamente il valore.
Perché usare getter e setter?
Getter e setter ti consentono di controllare in che modo le variabili importanti sono accessibili e aggiornate nel tuo codice. Ad esempio, considera questo metodo setter:
public void setNumber(int number) { if (number 10) { throw new IllegalArgumentException(); } this.number = num; }
Utilizzando il setNumber
metodo, puoi essere certo che il valore di number
è sempre compreso tra 1 e 10. Questo è molto meglio dell'aggiornamento number
diretto della variabile:
obj.number = 13;
Se esegui l'aggiornamento number
direttamente, è possibile che tu possa causare effetti collaterali indesiderati da qualche altra parte nel codice. Qui, l'impostazione number
su 13 viola il vincolo da 1 a 10 che vogliamo stabilire.
Creare number
una variabile privata e utilizzare il setNumber
metodo impedirebbe che ciò accada.
D'altra parte, l'unico modo per leggere il valore di number
è utilizzare un metodo getter:
public int getNumber() { return this.number; }