Un tipo enum è un tipo di dato speciale che consente a una variabile di assumere un insieme di costanti predefinite.
La variabile deve essere uguale a uno dei valori che sono stati predefiniti per quel tipo.
Esempi comuni sono i punti cardinali (i valori NORTH, SOUTH, EAST e WEST) e i giorni della settimana.
Poiché sono costanti, i nomi dei campi di un tipo enum si scrivono in lettere maiuscole.
Nel linguaggio di programmazione Java, un tipo enum si definisce usando la parola chiave enum.
Per esempio, un tipo enum per i giorni della settimana si specifica così:
public enum DayOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
Dovresti usare i tipi enum ogni volta che ti serve rappresentare un insieme fisso di costanti. Questo vale per i tipi enum naturali, come i pianeti del nostro sistema solare, e per gli insiemi di dati in cui conosci tutti i valori possibili già in fase di compilazione: per esempio le voci di un menu, i flag della riga di comando e così via.
Ecco del codice che mostra come usare il tipo enum DayOfWeek definito sopra:
public class Shop {
public String getOpeningHours(DayOfWeek dayOfWeek) {
switch (dayOfWeek) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
return "9am - 5pm";
case SATURDAY:
return "10am - 4pm"
case SUNDAY:
return "Closed.";
}
}
}
var shop = new Shop();
shop.getOpeningHours(DayOfWeek.WEDNESDAY);
// => "9am - 5pm"
I tipi enum del linguaggio di programmazione Java sono molto più potenti dei loro equivalenti in altri linguaggi.
La dichiarazione enum definisce una classe (chiamata tipo enum).
Il corpo della classe enum può includere metodi e altri campi:
public enum Rating {
GREAT(5),
GOOD(4),
OK(3),
BAD(2),
TERRIBLE(1);
private final int numberOfStars;
Rating(int numberOfStars) {
this.numberOfStars = numberOfStars;
}
public int getNumberOfStars() {
return this.numberOfStars;
}
}
Chiamare il metodo getNumberOfStars su un membro del tipo enum Rating:
Rating.GOOD.getNumberOfStars();
// => 4
Il compilatore aggiunge automaticamente alcuni metodi speciali quando crea un enum.
Per esempio, gli enum hanno un metodo statico values che restituisce un array contenente tutti i valori dell'enum nell'ordine in cui sono dichiarati:
for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
System.out.println(dayOfWeek.toString());
}
Il frammento di codice qui sopra stampa quanto segue:
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
Il compilatore aggiunge anche un metodo statico valueOf che restituisce un membro dell'enum in base al suo nome:
DayOfWeek.valueOf("SUNDAY");
// => DayOfWeek.SUNDAY