The enum typen er en ny funksjon i Java 1.5.0 språk, utviklet for å løse svakheter i måten opplistede verdiene ble håndtert i tidligere Java- versjoner . På sitt mest grunnleggende, vedtar det en struktur som ligner på enum typen i C - baserte språk , men det er en god del kraftigere. Den Enum Object
Før du går videre til enumeratorer seg selv , er det best å illustrere problemet at den nye enum typen ble opprettet for å løse . Tenk på følgende klasse :
public class Kalender {
int dayOfWeek
GO
public static final int mandag = 0
GO
public static final int tirsdag = 1
GO
public static final int onsdag = 2
GO
....
ugyldig setDayOfWeek ( int dato) { ... }
}
Denne klassen lagrer den dagen i uken ved hjelp av et sett med opplistede konstanter med heltallige verdier av 0-7 , som svarer til en annen dag , og det antas at andre utviklere som bruker denne klassen vil bruke disse konstantene når du bruker klassen . Men håndhever ingenting dette. Andre klasser kan ignorere konstanter , bruke sine egne konstanter (som starter med søndag , kanskje) ved en feiltakelse , eller til og med , som et resultat av en bug, passere i \\ " 8 \\ " som en dag i uken , noe som muliggjør en bug å forplante seg videre enn det burde. Det er også spesielt uninformative i debugging , som verdien av \\ " dayOfWeek \\" vil bli skrevet til konsollen eller til en debugger rett og slett som et heltall som har å bli sett opp i kildekoden . Enumeratorer er designet for å håndtere alle disse problemene. Følgende er i samme klasse , ved hjelp av enum typen i stedet for et sett med nummererte konstanter :
public class Kalender {
offentlige enum Day { mandag , tirsdag , onsdag , torsdag , fredag , lørdag , søndag
}
dag dayOfWeek
void setDayOfWeek (Dag d ) { ... }
}
Ovennevnte koden , foruten å være renere og mer lesbar, tar for seg alle problemene nevnt ovenfor med opplistede konstanter . Kundene blir nå tvunget til å bruke kun de opplistede verdiene i seg selv , og debuggers vil vise nummerert verdien navn og ikke et heltall. I tillegg enumeratorer har en rekke andre fordeler . For eksempel kan de brukes sammen med de nye for - hver sløyfe funksjon som ble tilsatt i Java 1.5.0 . Kalenderen klasse kan omfatte metode som dette :
void printDays () {
for (Dag d: Day.values ( ) ) {
System.out.println ( "I dag er " + d )
GO
}
}
Denne metoden vil reagere gjennom alle dager og skrive ut navnene deres .
enumeratorer er klasser i sin egen rett , som betyr at de kan ha sine egne metoder og konstruktører . Tenk på følgende enum , som lagrer karakterene i en lek , slik at med en kort beskrivelse av det tegnet :
offentlige enum Character {
MYSTERIOUS_MAN ( "Tall , dark og kjekk . ") ,
MYSTERIOUS_WOMAN ( " Iført en rød kjole. ") ,
hovedpersonen ( " Dashing og heroisk . ") ,
ANTAGONIST ( " Oser onde . ");
String beskrivelse
GO
Character ( String beskrivelse) {
this.description = beskrivelse
GO
}
}