Esercizi sulle Classi Immutabili in Java
- Esercizio 1: Creazione di una Classe Immutabile
- Esercizio 2: Classe Immutabile con Oggetti Mutabili
- Esercizio 3: Classe Immutabile con Oggetti di Tipo Array
- Esercizio 4: Classe Immutabile con Oggetti di Tipo List
- Esercizio 5: Classe Immutabile con Oggetti di Tipo Map
- Esercizio 6: Classe Immutabile con Oggetti di Tipo Date
- Esercizio 7: Classe Immutabile con Oggetti di Tipo Custom
- Esercizio 8: Classe Immutabile con Costruttore Statico
Ecco degli esercizi con soluzione per praticare la creazione e l’uso delle classi immutabili in Java.
Esercizio 1: Creazione di una Classe Immutabile
Creare una semplice classe immutabile `Persona` con attributi `nome` e `età `.
public final class Persona { private final String nome; private final int eta;
public Persona(String nome, int eta) { this.nome = nome; this.eta = eta; }
public String getNome() { return nome; }
public int getEta() { return eta; }
public static void main(String[] args) { Persona persona = new Persona("Mario", 30); System.out.println("Nome: " + persona.getNome()); System.out.println("Età : " + persona.getEta()); }}
Esercizio 2: Classe Immutabile con Oggetti Mutabili
Creare una classe immutabile `Indirizzo` che contiene un attributo mutabile `StringBuilder` e rendere l'oggetto immutabile.
public final class Indirizzo { private final StringBuilder indirizzo;
public Indirizzo(String indirizzo) { this.indirizzo = new StringBuilder(indirizzo); }
public String getIndirizzo() { return indirizzo.toString(); }
public static void main(String[] args) { Indirizzo ind = new Indirizzo("Via Roma 1"); System.out.println("Indirizzo: " + ind.getIndirizzo()); }}
Esercizio 3: Classe Immutabile con Oggetti di Tipo Array
Creare una classe immutabile `ClasseConArray` che contiene un array e rendere l'oggetto immutabile.
import java.util.Arrays;
public final class ClasseConArray { private final int[] valori;
public ClasseConArray(int[] valori) { this.valori = valori.clone(); }
public int[] getValori() { return valori.clone(); }
public static void main(String[] args) { int[] array = {1, 2, 3}; ClasseConArray obj = new ClasseConArray(array); System.out.println("Valori: " + Arrays.toString(obj.getValori())); }}
Esercizio 4: Classe Immutabile con Oggetti di Tipo List
Creare una classe immutabile `ClasseConList` che contiene una lista e rendere l'oggetto immutabile.
import java.util.ArrayList;import java.util.Collections;import java.util.List;
public final class ClasseConList { private final List<String> valori;
public ClasseConList(List<String> valori) { this.valori = new ArrayList<>(valori); }
public List<String> getValori() { return Collections.unmodifiableList(valori); }
public static void main(String[] args) { List<String> lista = new ArrayList<>(); lista.add("a"); lista.add("b"); ClasseConList obj = new ClasseConList(lista); System.out.println("Valori: " + obj.getValori()); }}
Esercizio 5: Classe Immutabile con Oggetti di Tipo Map
Creare una classe immutabile `ClasseConMap` che contiene una mappa e rendere l'oggetto immutabile.
import java.util.Collections;import java.util.HashMap;import java.util.Map;
public final class ClasseConMap { private final Map<String, String> valori;
public ClasseConMap(Map<String, String> valori) { this.valori = new HashMap<>(valori); }
public Map<String, String> getValori() { return Collections.unmodifiableMap(valori); }
public static void main(String[] args) { Map<String, String> mappa = new HashMap<>(); mappa.put("chiave1", "valore1"); mappa.put("chiave2", "valore2"); ClasseConMap obj = new ClasseConMap(mappa); System.out.println("Valori: " + obj.getValori()); }}
Esercizio 6: Classe Immutabile con Oggetti di Tipo Date
Creare una classe immutabile `ClasseConData` che contiene un oggetto `Date` e rendere l'oggetto immutabile.
import java.util.Date;
public final class ClasseConData { private final Date data;
public ClasseConData(Date data) { this.data = new Date(data.getTime()); }
public Date getData() { return new Date(data.getTime()); }
public static void main(String[] args) { Date data = new Date(); ClasseConData obj = new ClasseConData(data); System.out.println("Data: " + obj.getData()); }}
Esercizio 7: Classe Immutabile con Oggetti di Tipo Custom
Creare una classe immutabile `ClasseConCustom` che contiene un oggetto di tipo custom e rendere l'oggetto immutabile.
public final class ClasseConCustom { private final CustomOggetto customOggetto;
public ClasseConCustom(CustomOggetto customOggetto) { this.customOggetto = new CustomOggetto(customOggetto.getValore()); }
public CustomOggetto getCustomOggetto() { return new CustomOggetto(customOggetto.getValore()); }
public static void main(String[] args) { CustomOggetto co = new CustomOggetto(5); ClasseConCustom obj = new ClasseConCustom(co); System.out.println("CustomOggetto: " + obj.getCustomOggetto().getValore()); }}
class CustomOggetto { private final int valore;
public CustomOggetto(int valore) { this.valore = valore; }
public int getValore() { return valore; }}
Esercizio 8: Classe Immutabile con Costruttore Statico
Creare una classe immutabile `ClasseConCostruttoreStatico` che utilizza un metodo statico per creare un'istanza.
public final class ClasseConCostruttoreStatico { private final String nome; private final int eta;
private ClasseConCostruttoreStatico(String nome, int eta) { this.nome = nome; this.eta = eta; }
public static ClasseConCostruttoreStatico creaIstanza(String nome, int eta) { return new ClasseConCostruttoreStatico(nome, eta); }
public String getNome() { return nome; }
public int getEta() { return eta; }
public static void main(String[] args) { ClasseConCostruttoreStatico obj = ClasseConCostruttoreStatico.creaIstanza("Luigi", 25); System.out.println("Nome: " + obj.getNome()); System.out.println("Età : " + obj.getEta()); }}