Enum in Java
- #java
- #programmazione
- #enum
- #tipi
- #oop
In questa lezione
- 1. Cos’è un Enum?
- 2. Perché usare enum?
- 3. Sintassi base
- 4. Utilizzare un enum
- 4.1 Esempio completo
- 5. Enum e controlli condizionali
- 5.1 Con if
- 5.2 Con switch (molto usato)
- 6. Metodi automatici degli enum
- 6.1 values() — tutti i valori
- 6.2 valueOf() — da stringa a enum
- 6.3 ordinal() — posizione (da 0)
- 7. Enum con attributi e metodi
- 7.1 Esempio: livelli con codice
- 7.2 Esempio: pianeti con massa e raggio
- 8. Quando usare enum
- 9. Quiz a risposta multipla
- 10. Esercizi
- 10.1 Esercizio: Semaforo
- 10.2 Esercizio: Taglia con misura
- 10.3 Esercizio
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");
Attenzione
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
Mettiti alla prova
0/5 risposte
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
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.