9. Aufzählungen mit enum Konstanten und Aufzählungen 9. Aufzählungen mit enum enum-Deklaration (2) 9. Aufzählungen mit enum Für die Definition von systemweiten Konstanten haben wir bisher öffentliche finale Klassenvariablen verwendet. public class MusicStyle { public static final int public static final int public static final int public static final int } enum • Eine enum-Deklaration verhält sich wie eine Klassendeklaration. • Insbesondere ist mit der Deklaration ein neuer Datentyp verbunden. Wochentag tag = Wochentag.SONNTAG; ROCK POP COUNTRY TECHNO = = = = 0; 1; 2; 3; • • • • Ober- und Unterklassen sind nicht erlaubt. Variablen und Methoden sind möglich. Für den Aufzählungstyp wird eine class-Datei erstellt. Die Elemente der Aufzählung werden durch Objekte repräsentiert. Probleme: • Kein Zwang zur Verwendung • Datentyp int statt eines eigenen Datentyps Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08 9. Aufzählungen mit enum 230 enum enum-Deklaration (1) Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08 9. Aufzählungen mit enum enum enum-Konstanten in switch Seit Java 5 sind “richtige Aufzählungen” mit dem Schlüsselwort enum möglich. enum-Konstanten können als case-Marke verwendet werden. Syntax: Wochentag tag = Wochentag.SONNTAG; public enum Aufzählungstyp { Aufzählung } switch (tag) { case MONTAG : System.out.println("Ich mag keine Montage!"); break; case FREITAG: System.out.println("Gott sei Dank, es ist Freitag!"); break; } Beispiel: public enum Wochentag { MONTAG, DIENSTAG, ... , SONNTAG } Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08 232 231 Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08 233 9. Aufzählungen mit enum enum enum und Objektorientierung • enum-Typen überschreiben sinnvoll die folgenden Methoden aus java.lang.Objects: – toString() – hashCode() – equals() • Sie implementieren die Schnittstellen Serializable und Comparable. • Die Ordnung der Elemente ergibt sich durch die Reihenfolge bei der Deklaration. • Aufzählungstypen sind Referenztypen! Daher ist Wochentag tag = null; möglich. • Wo notwendig auf == null prüfen und Exception auslösen. • import wie bei Klassen Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08 9. Aufzählungen mit enum 234 enum Praktische Methoden im Zusammenhang mit enum • Die statische Methode valueOf(String) bestimmt zu einem String den zugehörigen enum-Wert: Wochentag tag = Wochentag.valueOf("SONNTAG"); // liefert Wochentag.SONNTAG • Die Umkehrung hierzu ist toString(): Wochentag tag = Wochentag.valueOf("SONNTAG"); System.out.println("Heute ist " + tag.toString()); • Die Methode ordinal() liefert die Ordinalzahl zu einer enum-Konstanten. • Die Klassenmethode values() liefert ein Feld mit allen Werten des Aufzählungstyps: for (Wochentag t : Wochentag.values()) System.out.println(t + " hat den Wert " + t.ordinal()); Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08 235