Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Lavorare con Enum in Java | Funzionalità e Tecniche Avanzate di Java
Strutture Dati Java

bookLavorare 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

DaysOfTheWeek.java

copy
123456789
public 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

Main.java

copy
123456789101112131415161718
package 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

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637
package 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

Main.java

copy
12345678910111213
package 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

Main.java

copy
12345678910111213
enum 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

Main.java

copy
1234567891011121314151617181920212223
package 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

  1. Migliore leggibilità: la sostituzione di costanti numeriche e stringhe letterali con valori denominati rende il codice più leggibile;
  2. Sicurezza di tipo: il compilatore garantisce la sicurezza di tipo quando si lavora con gli enum, prevenendo errori legati ai tipi;
  3. Insieme limitato di valori: gli enum forniscono un insieme fisso di valori, rendendo il codice più prevedibile;
  4. 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:

question mark

Che cos'è un enum in Java?

Select the correct answer

question mark

Come si dichiara un enum chiamato Months che rappresenta i mesi dell'anno?

Select the correct answer

question mark

Come si può ottenere un array di tutti i valori in un enum chiamato Colors?

Select the correct answer

question mark

Quale delle seguenti affermazioni riguardo al seguente enum è vera?

Select the correct answer

question mark

Come si confronta correttamente currentStatus con Status.ACTIVE? Considera il seguente enum:

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 1

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

bookLavorare 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

DaysOfTheWeek.java

copy
123456789
public 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

Main.java

copy
123456789101112131415161718
package 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

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637
package 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

Main.java

copy
12345678910111213
package 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

Main.java

copy
12345678910111213
enum 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

Main.java

copy
1234567891011121314151617181920212223
package 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

  1. Migliore leggibilità: la sostituzione di costanti numeriche e stringhe letterali con valori denominati rende il codice più leggibile;
  2. Sicurezza di tipo: il compilatore garantisce la sicurezza di tipo quando si lavora con gli enum, prevenendo errori legati ai tipi;
  3. Insieme limitato di valori: gli enum forniscono un insieme fisso di valori, rendendo il codice più prevedibile;
  4. 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:

question mark

Che cos'è un enum in Java?

Select the correct answer

question mark

Come si dichiara un enum chiamato Months che rappresenta i mesi dell'anno?

Select the correct answer

question mark

Come si può ottenere un array di tutti i valori in un enum chiamato Colors?

Select the correct answer

question mark

Quale delle seguenti affermazioni riguardo al seguente enum è vera?

Select the correct answer

question mark

Come si confronta correttamente currentStatus con Status.ACTIVE? Considera il seguente enum:

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 1
some-alt