Den enum typ är en ny funktion i Java 1.5.0 språket , för att lösa brister i hur de uppräknade värdena hanteras i tidigare Java-versioner . I sin mest grundläggande , antar den en struktur som liknar den enum typ i C - baserade språk , men det är en mycket mer kraftfull . ENUM Object
Innan vi går vidare till enums själva , är det bäst att illustrera problemet att den nya enum typ skapades för att lösa . Betrakta följande klass :
public class Kalender {
int dayOfWeek
GO
public static final int Måndag = 0
GO
public static final int tisdag = 1
GO
public static final int onsdag = 2
GO
....
void setDayOfWeek ( int datum ) { ... }
}
Denna klass lagrar veckodag hjälp av en uppsättning uppräknade konstanter med heltalsvärden på 0-7 , vart och ett motsvarande en annan dag , och det förväntas att andra utvecklare använder den här klassen kommer att använda dessa konstanter när du använder klassen . Emellertid verkställer ingenting här . Övriga klasser kan ignorera konstanter , använder sina egna konstanter ( som börjar med söndag , kanske ) av misstag , eller ens , som en följd av en bugg , skicka in \\ " 8 \\ " som en dag i veckan , vilket kan vara ett bugg för att propagera längre än det borde . Det är också särskilt uninformative i felsökning , eftersom värdet av \\ " dayOfWeek \\ " kommer att skrivas ut till konsolen eller en debugger helt enkelt som ett heltal som måste slås upp i källkoden . Enums är utformade för att ta itu med alla dessa frågor . Följande är samma klass , med hjälp av enum typ istället för en uppsättning uppräknade konstanter :
public class Kalender {
offentliga enum Day { måndag , tisdag , onsdag , torsdag , fredag , lördag , söndag
}
Dag dayOfWeek
void setDayOfWeek ( Dag d ) { ... }
}
Ovanstående kod , förutom att vara renare och mer lättläst , tar upp alla de problem som anges ovan med uppräknade konstanter . Kunderna tvingas nu att endast använda de uppräknade värdena själva , och felsökare visar uppräknade värdet namn och inte ett heltal . Dessutom enums har ett antal andra fördelar. Till exempel kan de användas med den nya för - varje slinga funktion som tillsattes i Java 1.5.0. Kalendern klass skulle kunna innefatta metod så här :
void printDays () {
för ( Dag d : Day.values ( ) ) {
System.out.println ( "Idag är " + d )
GO
}
}
Denna metod kommer att iterera igenom alla dagar och skriva ut deras namn .
Enums finns klasser i sin egen rätt , vilket innebär att de kan ha sina egna metoder och konstruktorer . Betrakta följande enum , som lagrar karaktärerna i en pjäs , vilket med en kort beskrivning av denna karaktär :
offentliga enum Character {
MYSTERIOUS_MAN ( " Tall , dark och vacker . " ) ,
MYSTERIOUS_WOMAN ( " Iklädd en röd klänning . " ) ,
HUVUDPERSON ( " Dashing och heroisk . " ) ,
antagonist ( " Oozing onda . " ) ;
String beskrivning
GO
Character ( String beskrivning) {
this.description = Beskrivning
GO
}
} Addera