Lavorare con Enum in Java
Passiamo a un'altra struttura dati molto interessante e, soprattutto, distintiva: enum.
Esaminiamo la creazione di un enum. La creazione di un enum differisce notevolmente dalle altre strutture dati, poiché viene effettuata a livello di classe:
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Applicazione pratica
Enum è necessario per poter fare facilmente riferimento alla costante. Poiché si tratta di un elenco di costanti, vi si accede nel seguente modo:
Main.java
123456789101112131415161718package com.example; public class Main { public static void main(String[] args) { Days today = Days.MONDAY; System.out.println(today); } } enum Days { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
Qui accediamo semplicemente alla costante enum per capire che giorno è oggi. Invece di creare molte costanti diverse, memorizziamo semplicemente un array di costanti nell'enum. Questo è comodo e molto pratico. Ad esempio, in una delle sfide precedenti, avremmo potuto memorizzare i nomi dei reparti in un enum e utilizzare la costante come chiave.
Vediamo un esempio:
Main.java
12345678910111213141516171819202122232425262728293031323334353637package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingEmployees = new ArrayList<>(); marketingEmployees.add("Michael"); marketingEmployees.add("Alice"); marketingEmployees.add("Jimmy"); List<String> developerEmployees = new ArrayList<>(); developerEmployees.add("Bob"); developerEmployees.add("John"); developerEmployees.add("Ryan"); List<String> analyticsEmployees = new ArrayList<>(); analyticsEmployees.add("Alexander"); analyticsEmployees.add("Ben"); Map<Departments, List<String>> company = new HashMap<>(); company.put(Departments.MARKETING, marketingEmployees); company.put(Departments.DEVELOPMENT, developerEmployees); company.put(Departments.ANALYTICS, analyticsEmployees); System.out.println("Company: " + company); } } enum Departments { MARKETING, DEVELOPMENT, ANALYTICS }
Conversione in un Array
Inoltre, è possibile recuperare tutti i valori costanti da un enum come array utilizzando il metodo values().
Ecco un esempio:
Main.java
12345678910111213package com.example; public class Main { public static void main(String[] args) { Days[] array = Days.values(); Days monday = array[1]; System.out.println(monday); } } enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Dichiarazione di campi e metodi negli Enum
È possibile dichiarare campi e metodi anche negli enum.
Consideriamo un esempio di semaforo:
Main.java
12345678910111213enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
Negli enum, i metodi funzionano in modo leggermente diverso. Poiché sono costanti, non possono essere modificati. Pertanto, aggiungiamo i campi nel costruttore di questo enum, dopodiché definiamo il metodo getAction() che restituisce immediatamente l'azione da intraprendere per uno specifico semaforo. Come puoi vedere, specifichiamo questa azione direttamente nell'enum durante l'enumerazione delle costanti.
Vediamo un esempio di chiamata a tale metodo:
Main.java
1234567891011121314151617181920212223package com.example; public class Main { public static void main(String[] args) { TrafficLight currentLight = TrafficLight.RED; String currentAction = currentLight.getAction(); System.out.println("Action: " + currentAction); } } enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
Come puoi vedere, grazie al metodo getAction(), abbiamo ottenuto immediatamente l'azione da intraprendere per uno specifico semaforo. Puoi modificare RED con qualsiasi altro colore e osservare cosa succede.
Metodi e campi negli enum non sono utilizzati frequentemente, ma questa funzionalità è presente, quindi è utile esserne consapevoli. Puoi approfondire gli enum nella Documentazione ufficiale Java
Vantaggi degli Enum in Java
- Migliore leggibilità: la sostituzione di costanti numeriche e stringhe letterali con valori denominati rende il codice più leggibile;
- Sicurezza di tipo: il compilatore garantisce la sicurezza di tipo quando si lavora con gli enum, prevenendo errori legati ai tipi;
- Insieme limitato di valori: gli enum forniscono un insieme fisso di valori, rendendo il codice più prevedibile;
- Possibilità di aggiungere metodi e campi: gli enum possono contenere metodi e campi, risultando più potenti rispetto alle semplici enumerazioni.
1. Che cos'è un enum in Java?
2. Come si dichiara un enum chiamato Months che rappresenta i mesi dell'anno?
3. Come si può ottenere un array di tutti i valori in un enum chiamato Colors?
4. Quale delle seguenti affermazioni riguardo al seguente enum è vera?
5. Come si confronta correttamente currentStatus con Status.ACTIVE? Considera il seguente enum:
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Fantastico!
Completion tasso migliorato a 4
Lavorare con Enum in Java
Scorri per mostrare il menu
Passiamo a un'altra struttura dati molto interessante e, soprattutto, distintiva: enum.
Esaminiamo la creazione di un enum. La creazione di un enum differisce notevolmente dalle altre strutture dati, poiché viene effettuata a livello di classe:
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Applicazione pratica
Enum è necessario per poter fare facilmente riferimento alla costante. Poiché si tratta di un elenco di costanti, vi si accede nel seguente modo:
Main.java
123456789101112131415161718package com.example; public class Main { public static void main(String[] args) { Days today = Days.MONDAY; System.out.println(today); } } enum Days { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
Qui accediamo semplicemente alla costante enum per capire che giorno è oggi. Invece di creare molte costanti diverse, memorizziamo semplicemente un array di costanti nell'enum. Questo è comodo e molto pratico. Ad esempio, in una delle sfide precedenti, avremmo potuto memorizzare i nomi dei reparti in un enum e utilizzare la costante come chiave.
Vediamo un esempio:
Main.java
12345678910111213141516171819202122232425262728293031323334353637package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingEmployees = new ArrayList<>(); marketingEmployees.add("Michael"); marketingEmployees.add("Alice"); marketingEmployees.add("Jimmy"); List<String> developerEmployees = new ArrayList<>(); developerEmployees.add("Bob"); developerEmployees.add("John"); developerEmployees.add("Ryan"); List<String> analyticsEmployees = new ArrayList<>(); analyticsEmployees.add("Alexander"); analyticsEmployees.add("Ben"); Map<Departments, List<String>> company = new HashMap<>(); company.put(Departments.MARKETING, marketingEmployees); company.put(Departments.DEVELOPMENT, developerEmployees); company.put(Departments.ANALYTICS, analyticsEmployees); System.out.println("Company: " + company); } } enum Departments { MARKETING, DEVELOPMENT, ANALYTICS }
Conversione in un Array
Inoltre, è possibile recuperare tutti i valori costanti da un enum come array utilizzando il metodo values().
Ecco un esempio:
Main.java
12345678910111213package com.example; public class Main { public static void main(String[] args) { Days[] array = Days.values(); Days monday = array[1]; System.out.println(monday); } } enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Dichiarazione di campi e metodi negli Enum
È possibile dichiarare campi e metodi anche negli enum.
Consideriamo un esempio di semaforo:
Main.java
12345678910111213enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
Negli enum, i metodi funzionano in modo leggermente diverso. Poiché sono costanti, non possono essere modificati. Pertanto, aggiungiamo i campi nel costruttore di questo enum, dopodiché definiamo il metodo getAction() che restituisce immediatamente l'azione da intraprendere per uno specifico semaforo. Come puoi vedere, specifichiamo questa azione direttamente nell'enum durante l'enumerazione delle costanti.
Vediamo un esempio di chiamata a tale metodo:
Main.java
1234567891011121314151617181920212223package com.example; public class Main { public static void main(String[] args) { TrafficLight currentLight = TrafficLight.RED; String currentAction = currentLight.getAction(); System.out.println("Action: " + currentAction); } } enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
Come puoi vedere, grazie al metodo getAction(), abbiamo ottenuto immediatamente l'azione da intraprendere per uno specifico semaforo. Puoi modificare RED con qualsiasi altro colore e osservare cosa succede.
Metodi e campi negli enum non sono utilizzati frequentemente, ma questa funzionalità è presente, quindi è utile esserne consapevoli. Puoi approfondire gli enum nella Documentazione ufficiale Java
Vantaggi degli Enum in Java
- Migliore leggibilità: la sostituzione di costanti numeriche e stringhe letterali con valori denominati rende il codice più leggibile;
- Sicurezza di tipo: il compilatore garantisce la sicurezza di tipo quando si lavora con gli enum, prevenendo errori legati ai tipi;
- Insieme limitato di valori: gli enum forniscono un insieme fisso di valori, rendendo il codice più prevedibile;
- Possibilità di aggiungere metodi e campi: gli enum possono contenere metodi e campi, risultando più potenti rispetto alle semplici enumerazioni.
1. Che cos'è un enum in Java?
2. Come si dichiara un enum chiamato Months che rappresenta i mesi dell'anno?
3. Come si può ottenere un array di tutti i valori in un enum chiamato Colors?
4. Quale delle seguenti affermazioni riguardo al seguente enum è vera?
5. Come si confronta correttamente currentStatus con Status.ACTIVE? Considera il seguente enum:
Grazie per i tuoi commenti!