🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Esercizi sulle Classi Immutabili in Java

Codegrind Team•Jul 12 2024

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());
    }
}