Die Enum-Typ ist ein neues Feature in der Java 1.5.0 Sprache , entworfen, um Schwächen in der Art und Weise aufgezählten Werte in früheren Java-Versionen gehandhabt wurden zu lösen. Am einfachsten nimmt es eine ähnliche Struktur wie die Enum-Typ in C -basierten Sprachen , aber es ist sehr viel mächtiger. Die Enum Object
Bevor ich auf sich Aufzählungen , ist es am besten , um das Problem , dass die neue Enum-Typ erstellt wurde, zu lösen illustrieren. Betrachten Sie die folgende Klasse :
public class Kalender { int
dayOfWeek GO
public static final int Montag = 0
GO public static final int Dienstag = 1
GO public static final int mittwoch = 2
GO ....
nichtig setDayOfWeek (int date) {... } }
Diese Klasse speichert den Tag der Woche mit einer Reihe von Enumerationskonstanten mit ganzzahligen Werten von 0-7 , die jeweils auf einen anderen Tag und es wird erwartet, dass andere Entwickler die Verwendung dieser Klasse wird diese Konstanten zu verwenden, wenn die Klasse . Allerdings setzt dies nichts . Andere Klassen ignorieren konnte die Konstanten , ihre eigenen Konstanten (beginnend mit Sonntag, vielleicht) aus Versehen , oder sogar , als Folge eines Fehlers , in \\ " 8 \\ " passieren als einen Tag in der Woche , so dass möglicherweise ein bug weiter verbreiten als es sollte. Es ist auch besonders in uninformative Debugging , da der Wert von \\ " dayOfWeek \\ " auf der Konsole oder mit einem Debugger einfach als ganze Zahl, die bis in den Quellcode betrachtet werden muss gedruckt werden. Enums sind entworfen, um all diese Probleme anzugehen. Das folgende ist die gleiche Klasse , mit der Enum-Typ anstelle einer Reihe von Enumerationskonstanten :
public class Kalender {
public enum Tag { Montag, Dienstag, Mittwoch , Donnerstag, Freitag , Samstag, Sonntag
}
Day dayOfWeek
nichtig setDayOfWeek (Tag d) {... } }
Der obige Code , abgesehen davon, sauberer und besser lesbar , richtet sich an alle der oben genannten Probleme mit Enumerationskonstanten aufgelistet. Clients sind nun gezwungen, verwenden Sie nur die aufgezählten Werte selbst, und Debugger wird die aufgezählten Wert den Namen und nicht eine ganze Zahl zeigen . Darüber hinaus haben enums eine Reihe weiterer Vorteile. Zum Beispiel können sie mit dem neuen for-each- Schleife -Funktion, die in Java 1.5.0 aufgenommen werden. Das Calendar-Klasse könnten Verfahren wie folgt aus:
nichtig printDays () {
für ( Day d: Day.values ()) {
System.out.println ( "Heute ist " + d)
GO } }
Diese Methode wird durch Iteration alle Tage und ausdrucken ihren Namen.
Enums sind Klassen in ihrem eigenen Recht , das sie ihre eigenen Methoden und Konstruktoren haben bedeutet . Betrachten Sie die folgende Aufzählung , die die Zeichen speichert in einem Spiel , so dass mit einer kurzen Beschreibung des Charakters :
public enum { Character
MYSTERIOUS_MAN ( " Tall, dark und schön. " ) ,
MYSTERIOUS_WOMAN ( " trägt ein rotes Kleid . " ) ,
PROTAGONIST ( " Dashing und heroisch. " ) ,
ANTAGONIST ( " Oozing Bösen . ");
String Beschreibung GO
Charakter (String beschreibung) {
this.description = Beschreibung
GO
} }