En enum type er en spesiell datatype som gjør det mulig å sette variabler til forhåndsdefinerte konstanter.
Det hender at vi ønsker å definere et sett eller en begrenset mengde med verdier på en tydelig måte, og knytte metoder og egenskaper til disse verdiene. Til dette har java en enum-klasse.
Et brukseksempel er når vi vil tilordne kort i en kortstokk farge (eng: suit). I stedet for å bruke en String i koden, hvor vi skriver "hjerter", "kløver", osv. kan man definere disse fargene som konstanter i en enum-klasse.
Om man skriver feil i koden når man bruker en String til å representere farge ("spar" vs "spra"), vil ikke dette hindre utførelse av koden, og man vil kunne få kort med en suit man ikke forventer og har tatt høyde for. Denne "fellen" kan man unngå ved å bruke enum-klasser.
Enum-klasser skaper en struktur i koden og letter forståelsen av hva som utføres der enum-konstantene blir brukt.
Det vil som regel falle veldig naturlig der det passer å bruke en enum, og ofte erstatter en enum en begrenset mengde med f.eks. strenger som beskriver begreper vi mennesker kan forholde oss til. (Dette blir mer forståelig med eksemplene nedenfor)
Et typisk bruksområde for en enum er himmelretninger. Dersom vi ønsker å definere himmelretningene North, South, East og West på en annen måte enn f.eks. bare ved hjelp av forbokstaven deres, kan dette gjøres ved hjelp av en enum.
Enum for himmelretningene enum CardinalDirection { NORTH, SOUTH, EAST, WEST; } // Himmelretningene kan nå brukes som konstanter i koden og f.eks i statements CardinalDirection dir1 = CardinalDirection.NORTH; CardinalDirection dir2 = CardinalDirection.EAST; if (dir1 == CardinalDirection.WEST) { ... }
|
---|
Man kan også gi enum-konstantene verdier, som kan hentes ved behov for å presentere konstantene som tekst, tall eller andre datatyper. Man kan også knytte metoder til enum-konstanter.
Det faktum at vi har disse mulighetene gjør at vi egentlig kan se på enum-konstantene som noe i retning av "hybrid-objekter". Enum-konstantene kan ha innhold som felt og metoder, akkurat som vanlige objekter. Men man har allerede definert mengden av konstanter og vi kan ikke forandre de underveis i utførelsen av koden.
Enum for ukedagene public enum Day { MONDAY("Mon"), TUESDAY("Tue"), WEDNESDAY("Wed"), THURSDAY("Thu"), FRIDAY("Fri"), SATURDAY("Sat"), SUNDAY("Sun"); //Felt som definerer navnet på verien(e) konstantene får tildelt ovenfor String short; //Konstruktør som setter forkortelsene private Day (String short) { this.short = short; } // Metode for å hente verdien "short" public String getShort() { return this.short; } } // Vi kan da hente en string-verdi til hver av konstantene Day weekday = Day.MONDAY; System.out.println(weekday.getShort()); //Skriver ut "Mon"
|
---|