Il tipo enum è una nuova funzionalità nel linguaggio Java 1.5.0 , progettato per risolvere le debolezze nel modo in cui i valori enumerati sono stati trattati in precedenti versioni di Java . Nella sua forma più semplice , si adotta una struttura simile al tipo enum in linguaggi C -based , tuttavia , è molto più potente. L' oggetto Enum  
 Prima di passare a enumerazioni se stessi , è meglio per illustrare il problema che il nuovo tipo enum è stato creato per risolvere . Si consideri la seguente classe : 
 
 classe Calendar pubblico { 
 int dayOfWeek 
 GO 
 
 public int static final LUNEDI = 0 
 GO 
 public static final int MARTEDI = 1 
 GO 
 public static final int MERCOLEDI = 2 
 GO 
 .... 
 
 vuoto setDayOfWeek ( int data) { ... } } 
 
 
 Questa classe memorizza il giorno della settimana, utilizzando una serie di costanti enumerate con valori interi di 0-7 , ciascuno corrispondente ad una giornata diversa , e si prevede che altri sviluppatori utilizzano questa classe useranno queste costanti quando si utilizza la classe . Tuttavia, nulla impone questo . Altre classi potevano ignorare le costanti , utilizzare i propri costanti ( a partire da Domenica , forse) per errore , o anche , come risultato di un bug , passare in \\ " 8 \\ " come un giorno della settimana , che permettono a un bug di propagarsi ulteriormente di quanto dovrebbe. E 'anche particolarmente poco esaustivo il debug , come il valore di \\ " dayOfWeek \\ " verrà stampato sulla console oa un debugger semplicemente come un intero che deve essere cercato nel codice sorgente . Enumerazioni sono concepiti per affrontare tutte queste questioni . La seguente è la stessa classe , utilizzando il tipo enum invece di un insieme di costanti enumerate : 
 
 classe Calendar pubblico { 
 public enum Day { LUNEDI , MARTEDI , MERCOLEDI , GIOVEDI , VENERDI , SABATO , DOMENICA 
 } 
 Giorno dayOfWeek 
 
 vuoto setDayOfWeek ( Giorno d ) { ... } } 
 
 
 Il codice di cui sopra , oltre ad essere più pulito e leggibile , risolve tutti i problemi sopra elencati con costanti enumerate . I clienti sono ora costretti a utilizzare solo i valori enumerati stessi, e debugger mostreranno il nome del valore enumerato e non un numero intero. Inoltre , enum hanno un certo numero di altri vantaggi . Ad esempio, possono essere utilizzati con il nuovo - per ogni caratteristica ciclo che è stato aggiunto in Java 1.5.0 . La classe Calendar potrebbe includere metodo come questo : 
 
 printDays void ( ) { 
 per il ( giorno d : Day.values ( ) ) { 
 System.out.println ( "Oggi è " + d ) 
 GO 
 } } 
 
 
 Questo metodo scorrere tutti i giorni e stampare i loro nomi . 
 
 enumerazioni sono classi a sé stanti , che significa che possono avere i propri metodi e costruttori . Si consideri il seguente enum , che memorizza i personaggi in un gioco , che permette con una breve descrizione di quel personaggio : 
 
 public enum Character { 
 MYSTERIOUS_MAN ( " Alto, moro e bello . " ) , 
 MYSTERIOUS_WOMAN ( " Indossare un abito rosso . " ) , 
 PROTAGONISTA ( " Dashing ed eroico . " ) , 
 ANTAGONISTA ( " Stillicidio male . "); 
 
 String descrizione 
 GO 
 
 caratteri ( String descrizione ) { 
 this.description = descrizione 
 GO 
 
 } }