Contenuti del Corso
Java Avanzato
Java Avanzato
Getter e Setter
Il modo migliore per aggirare il modificatore di accesso private
Tutti i programmatori Java utilizzano costrutti chiamati getter e setter.
I getter e i setter sono metodi che seguono uno schema specifico. Vengono utilizzati per aggirare il modificatore di accesso private
e manipolare efficacemente i campi da un'altra classe.
Cosa fanno getter e setter?
In poche parole, il setter consente di assegnare un valore a un campo specifico protetto dal modificatore di accesso private, mentre il getter consente di recuperare il valore da un campo protetto dal modificatore di accesso private.
La sintassi per un getter e un setter:
Main.java
// getter public fieldType getFieldName() { return field; } // setter public void setFieldName(fieldType field) { this.field = field; }
Come puoi vedere nel codice sopra, utilizziamo la convenzione di denominazione per i metodi getFieldName()
e setFieldName()
. Pertanto, se abbiamo un campo private String name
e creiamo un getter e un setter con i nomi getName()
e setName()
, rispettivamente. È inoltre importante notare che il getter restituisce un valore dello stesso tipo del campo name
, mentre il setter accetta un parametro dello stesso tipo del campo name
.
Questo ci permette di accedere ai campi che sono protetti dal modificatore di accesso private
.
Vediamo un esempio di accesso a un campo private dalla classe Person
nella classe main
:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.setName("Bob"); System.out.println(bob.getName()); } } class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
Come puoi vedere, utilizziamo il setter per assegnare un valore al campo name
, e poi utilizziamo il getter per visualizzare il valore del campo name
sullo schermo. Presta attenzione alla sintassi di getter e setter, così come al fatto che il campo name
nella classe Person
è protetto dal modificatore di accesso private
.
Costruttore vs Getter/Setter
Quale conviene utilizzare: l'inizializzazione tramite costruttore + override del metodo toString()
, oppure l'uso di getter e setter?
È sicuramente preferibile utilizzare getter e setter per accedere ai campi protetti dal modificatore di accesso private
. Questo offre maggiore flessibilità nel codice e ne migliora la leggibilità. Quando si vede l'utilizzo del metodo getName()
nel codice, si comprende immediatamente che questo metodo recupera il campo chiamato name
. Lo stesso vale quando si vede l'utilizzo del metodo setName()
, si capisce subito che si sta assegnando un valore specifico al campo per l'oggetto della classe in cui viene utilizzato. Se altre persone leggono il tuo codice, saranno contente di vedere getter e setter.
Va inoltre sottolineato che ogni campo richiede il proprio getter e setter. Se una classe ha due campi protetti dal modificatore di accesso private
, la classe dovrebbe avere un getter per ciascun campo, ovvero due getter e due setter.
Vediamo un esempio in cui aggiungiamo un campo age
alla classe Person
:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.setName("Bob"); bob.setAge(27); System.out.println("Person's name: " + bob.getName() + ", Person's age: " + bob.getAge()); } } class Person { private String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Come puoi vedere, abbiamo creato un getter e un setter per ciascun campo della classe Person
. Nel metodo main
, abbiamo inizializzato i campi utilizzando il setter e visualizzato i loro valori sullo schermo tramite il getter. L'utilizzo di questi metodi è molto pratico e li utilizzerai frequentemente in futuro.
1. Qual è lo scopo dell'utilizzo di getter e setter?
2. Qual è la sintassi di un metodo getter in Java?
3. Qual è la sintassi di un metodo setter in Java?
Grazie per i tuoi commenti!