La maggior parte dei programmatori assegnare valori numerici per ciascun elemento di un elenco , come i giorni della settimana , per rendere la codifica più veloce ed evitare errori tipografici . Alcuni linguaggi di programmazione forniscono un tipo di enumeratore , o enum , che consente di definire un insieme fisso di costanti in un tipo speciale . L'utilizzo di un costrutto enum ha diversi vantaggi , come ad esempio una migliore corrispondenza di tipo , la capacità di definire metodi personalizzati , l'accesso ai membri automatici forniti dal compilatore , e una maggiore leggibilità e la manutenzione del programma complessivo . Fissare metodi personalizzati
Quando si utilizza il tipo enum , si definisce una nuova classe . Proprio come con qualsiasi altra classe , è possibile includere metodi e campi nella classe . Ciò consente di fornire funzionalità incapsulata relativo al tipo enum . Ad esempio, il seguente definisce una classe di tipo enum con la latitudine e la longitudine media di stati americani . Esso contiene un metodo personalizzato , la distanza , che calcola la distanza tra una latitudine e longitudine passati come parametri al metodo
importazione java.lang.Math statico * , . . Public enum Stato { AK ( 61,3850 , -152,2683 ) , AL ( 32,7990 , -86,8073 ) , ... WV ( 38,4680 , -80,9696 ) , WY ( 42,7475 , -107,2085 ) ;
privato doppio latitudine finale ; doppio longitudine finale privato; Stato (doppio latitudine, doppio longitudine ) { this.latitude = latitudine ; this.longitude = longitudine ; } doppia latitudine privato ( ) {return latitudine ; } doppia longitudine privato ( ) { longitudine return; } private static final double R = 6371 ;
< p > distanza doppia ( double lat , doppio lng ) { //legge sferica cos cosinesreturn ( sin ( latitudine ) * sin ( lat ) + cos ( latitudine ) * cos ( lat ) + cos ( LNG - longitudine ) ) * R ; } }
Enhanced tipo di corrispondenza
Poiché il tipo enum è una classe , si impone tipo di corrispondenza per comprendere la corrispondenza con l'insieme delle costanti definite nella enum . Ciò impedisce errori garantendo che parametri alle funzioni contengono sempre un valore nella classe tipo enum . Per esempio, se una funzione richiede una stagione come parametro , il parametro attuale passato alla funzione in fase di esecuzione saranno confrontati con i quattro valori ammissibili definiti dalla enum :
public enum { Stagione PRIMAVERA , ESTATE , INVERNO , AUTUNNO } ; funzione di tempo pubblico ( enum Stagione ) { ... } ;
Documentazione migliorata
Il costrutto enum facilita codice da capire e mantenere . Con la creazione di un enum costrutto di membri con nomi significativi , è il codice documento come lo si crea . Per esempio , che dichiara un enum chiamato "Option" lo rende facile da capire i casi nella dichiarazione " switch" :
enum Option { salvataggio, all'eliminazione ANNULLA }; scelta di Opzione; ... switch ( raccogliere ) {case SAVE : messaggio = DISCARD : messaggio = ANNULLA : break; }
Metodi speciali automatiche
In Java , il compilatore inserisce automaticamente metodi speciali in la classe per rendere più facile per eseguire le operazioni standard . Per esempio, il compilatore inserisce automaticamente un metodo chiamato " valori" che restituisce una matrice di valori costanti enum nell'ordine in cui sono state dichiarate . Questo rende l'iterazione su l' enum valori molto facile, come nel seguente esempio :
per (mese m: Month.values ( ) ) { System.out.println ( "% s ha % d giorni ", m , m.numberOfDays ( ) );}