Sostieni AppuntiFacili con una piccola donazione su PayPal

Dona con PayPal
AppuntiFacili
Torna Indietro Segnala errore

Enum in Java

Dennis Turco Informatica Java
Ultima modifica:
#java#programmazione#enum#tipi#oop

1. Cos’è un Enum?

Un enum (enumerazione) è un tipo di dato speciale introdotto in Java per rappresentare un insieme limitato e fisso di valori costanti.

Si usa quando una variabile può assumere solo alcuni valori predefiniti.

Esempi reali:

  • giorni della settimana
  • mesi dell’anno
  • stati di un ordine
  • livelli di accesso
  • direzioni (NORD, SUD, EST, OVEST)

2. Perché usare enum?

Prima degli enum si usavano spesso stringhe o interi:

String stato = "ATTIVO";   // ❌ potrei scrivere "Attivo", "attivo", "Ativo"...
int livello = 2;            // ❌ cosa vuol dire 2? non è chiaro

Problemi:

  • errori di scrittura (es. “Ativo”)
  • valori non validi accettati senza errori
  • codice poco leggibile
  • difficile manutenzione

Gli enum risolvono questi problemi — il compilatore controlla che il valore sia valido.

3. Sintassi base

enum NomeEnum {
    VALORE1,
    VALORE2,
    VALORE3
}
enum Giorno {
    LUNEDI, MARTEDI, MERCOLEDI, GIOVEDI, VENERDI, SABATO, DOMENICA
}

Ogni valore è chiamato costante enum.

4. Utilizzare un enum

Giorno oggi = Giorno.LUNEDI;
System.out.println(oggi); // -> LUNEDI

4.1 Esempio completo

public class Main {

    enum Stato { ACCESO, SPENTO }

    public static void main(String[] args) {
        Stato lampada = Stato.ACCESO;
        System.out.println(lampada); // -> ACCESO
    }
}

5. Enum e controlli condizionali

Gli enum funzionano perfettamente con if e switch.

5.1 Con if

if (lampada == Stato.ACCESO) {
    System.out.println("La lampada è accesa");
}

5.2 Con switch (molto usato)

enum Stagione { PRIMAVERA, ESTATE, AUTUNNO, INVERNO }

Stagione s = Stagione.ESTATE;

switch (s) {
    case PRIMAVERA: System.out.println("Fiori e sole");      break;
    case ESTATE:    System.out.println("Caldo e vacanze");   break;
    case AUTUNNO:   System.out.println("Foglie colorate");   break;
    case INVERNO:   System.out.println("Neve e freddo");     break;
}

6. Metodi automatici degli enum

6.1 values() — tutti i valori

for (Giorno g : Giorno.values()) {
    System.out.println(g);
}

6.2 valueOf() — da stringa a enum

Giorno g = Giorno.valueOf("LUNEDI");

WARNING

Deve essere scritto identico alla costante.

6.3 ordinal() — posizione (da 0)

System.out.println(Giorno.LUNEDI.ordinal()); // -> 0

7. Enum con attributi e metodi

Un enum è una classe speciale: può avere attributi, costruttori e metodi.

7.1 Esempio: livelli con codice

enum Livello {

    BASSO(1),
    MEDIO(2),
    ALTO(3);

    private final int codice;

    Livello(int codice) {
        this.codice = codice;
    }

    public int getCodice() {
        return codice;
    }
}

7.2 Esempio: pianeti con massa e raggio

enum Pianeta {

    MERCURIO(3.303e+23, 2.4397e6),
    VENERE  (4.869e+24, 6.0518e6),
    TERRA   (5.976e+24, 6.37814e6),
    MARTE   (6.421e+23, 3.3972e6);

    private final double massa;
    private final double raggio;

    Pianeta(double massa, double raggio) {
        this.massa = massa;
        this.raggio = raggio;
    }

    public double getMassa()  { return massa; }
    public double getRaggio() { return raggio; }
}

public class Main {
    public static void main(String[] args) {
        for (Pianeta p : Pianeta.values()) {
            System.out.println(p + " → massa: " + p.getMassa());
        }
    }
}

8. Quando usare enum

Usare un enum quando:

  • i valori sono pochi e non cambiano
  • rappresentano stati o categorie

Esempi ideali:

  • stato ordine → IN_PREPARAZIONE, SPEDITO, CONSEGNATO
  • ruolo utente → ADMIN, USER, GUEST
  • difficoltà → FACILE, MEDIO, DIFFICILE
  • direzioni → NORD, SUD, EST, OVEST

9. Quiz a risposta multipla

Cos'è un enum?

Quale parola chiave crea un enum?

Gli enum possono contenere attributi e metodi?

Quale metodo restituisce tutti i valori di un enum?

Quando è consigliato usare enum?

10. Esercizi

Esercizi Enum

10.1 Esercizio: Semaforo

Crea un enum Semaforo con ROSSO, GIALLO, VERDE e stampa il comportamento con switch.

💡 Mostra soluzione
enum Semaforo { ROSSO, GIALLO, VERDE }

public class Main {
    public static void main(String[] args) {

        Semaforo s = Semaforo.ROSSO;

        switch (s) {
            case ROSSO:  System.out.println("STOP");       break;
            case GIALLO: System.out.println("ATTENZIONE"); break;
            case VERDE:  System.out.println("VAI");        break;
        }
    }
}

10.2 Esercizio: Taglia con misura

Crea un enum Taglia con S, M, L, XL. Associa a ciascuno un valore numerico (S=36, M=38, L=40, XL=42) e stampali tutti.

💡 Mostra soluzione
enum Taglia {
    S(36), M(38), L(40), XL(42);

    private final int misura;

    Taglia(int misura) { this.misura = misura; }

    public int getMisura() { return misura; }
}

public class Main {
    public static void main(String[] args) {
        for (Taglia t : Taglia.values()) {
            System.out.println(t + " → " + t.getMisura());
        }
    }
}

10.3 Esercizio

Creare un enum Ruolo con ADMIN, USER, GUEST e stampare un messaggio diverso per ogni ruolo.

Prenota una lezione