Spiegazione di Getters e Setters in Java

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 setNumbermetodo, puoi essere certo che il valore di numberè sempre compreso tra 1 e 10. Questo è molto meglio dell'aggiornamento numberdiretto della variabile:

obj.number = 13;

Se esegui l'aggiornamento numberdirettamente, è possibile che tu possa causare effetti collaterali indesiderati da qualche altra parte nel codice. Qui, l'impostazione numbersu 13 viola il vincolo da 1 a 10 che vogliamo stabilire.

Creare numberuna variabile privata e utilizzare il setNumbermetodo 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; }