Enum Aufzählungstypen in Java



Ähnliche Dokumente
Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Enum-Klassen. Softwareentwicklung II (IB) Prof. Dr. Oliver Braun Letzte Änderung: :36. Enum-Klassen 1/12

Wichtige Datenstrukturen in Java

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

12 Abstrakte Klassen, finale Klassen und Interfaces

Enumerations und innere Klassen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 5: Interfaces

Vorkurs Informatik WiSe 15/16

Datenstrukturen / Container in Java

Programmieren 2 Java Überblick

Programmieren in Java

Überblick. Java 5. Java 6. Java 7. Referenzen. neue Sprachfeatures Erweiterungen Klassenbibliothek. Erweiterungen Klassenbibliothek

IT I: Heute. Klasse Object. equals, hashcode, tostring. HashSet IT I - VO 6 1

Info B VL 8: Abstrakte Klassen & Interfaces

1 Abstrakte Klassen, finale Klassen und Interfaces

Prüfung Softwareentwicklung II (IB)

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Programmieren in Java -Eingangstest-

Einstieg in die Informatik mit Java

Das Interface-Konzept am Beispiel der Sprache Java

Algorithmen und Datenstrukturen 07

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

14 Abstrakte Klassen, finale Klassen, Interfaces

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017

14 Abstrakte Klassen, finale Klassen, Interfaces

Vererbung. Martin Wirsing. Ziele. Vererbung

4. Vererbung Die Klasse Object. Die Klasse Object

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Methoden und Wrapperklassen

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

1 Klassen und Objekte

Objektorientierte Programmierung Studiengang Medieninformatik

Informatik II. Übungsstunde 6. Distributed Systems Group, ETH Zürich

Prüfung Softwareentwicklung I (IB)

Probeklausur: Programmierung WS04/05

Prüfung Softwareentwicklung II (IB)

Java Idioms. Basic und Advanced Java Coding Style. Prof. Dr. Nikolaus Wulff

Zustände umsetzen Enumerations (Aufzählungen) Zustandsobjekte

10. Felder (Arrays) Teil 2. Java-Beispiele: Echo.java Primzahlen.java Monate.java. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Zeichenketten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java. 16.

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Java für Bauingenieure

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Vererbung, Polymorphie

Einführung in die Programmierung

Einstieg in die Informatik mit Java

Neuere Sprachelemente in Java

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Programmierung Nachklausurtutorium

Einführung Compilergenerierung Bewertung Referenzen. SableCC. Benjamin Daeumlich

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

Algorithmen und Datenstrukturen

Programmierkurs Java

Musterlösung Stand: 5. Februar 2009

Fakultät IV Elektrotechnik/Informatik

Transkript:

Enum Aufzählungstypen in Java Dr Steffen Jost Institut für Informatik der LMU München

Endliche Aufzählungen 2 Endliche Aufzählungen (engl. Enumeration) bieten sich immer dann an, wenn Menge der Optionen vor Kompilieren bekannt Beispiele Booleans: true, false Wochentage: Montag, Dienstag,..., Sonntag Noten: Sehr gut,..., Ungenügend Spielkarten: Kreuz, Pik, Herz, Karo kein enum in Java Nachrichtentypen eines Protokolls: login, logout, chat,... Optionen, z.b. Kommandozeilenparameter Aufzählungen dürfen sich mit Programmversion ändern

Probleme ohne enum 3 Aufzählungen mit finalen int/string Konstanten modelliert Nachteile: Keine Typsicherheit: int-konstante MONTAG kann auch dort verwendet werden, wo eine Spielkartenfarbe erwartet wird. Keine Bereichsprüfung: Wert 42 kann übergeben werden, wo eine Wochentag int Konstante erwartet wird. Sprechende Namen nicht erzwungen: Hacks mit direkten Zahlen können auftauchen Geringe Effizienz: z.b. Vergleich von String Konstanten; Keine Modularität: Gesamt-Rekompilation bei Änderungen Seit Java 1.5: enum für endl. Aufzählungen möglich!

enum Deklarationen 4 Beispiel public enum Kartenfarbe { KREUZ, PIK, HERZ, KARO; }; Definiert Typ Kartenfarbe mit 4 Konstanten. mit Komma getrennt, mit Semikolon abgeschlossen Verwendung durch Kartenfarbe.PIK Kartenfarbe ist reguläre Java-Klasse: Nur jeweils eine Instanz pro statischer Konstante, d.h. es kann gefahrlos == verwendet werden Verschiedene Enums können gleiche Konstanten haben: Verwechslung wird durch Typsystem ausgeschlossen Erbe von java.lang.enum, Methoden automatisch erstellt

java.lang.enum 5 Folegende Methoden werden über java.lang.enum automatisch für jedes enum bereitgestellt: boolean equals(object other) int hashcode() int compareto(e o) String tostring() Direkt verwendbar Direkt verwendbar Vergleich gemäß Definitionsreihenfolge static <T extends Enum<T>> valueof(string) String name() int ordinal() Umwandlung zur Anzeige NICHT verwenden! NICHT verwenden! Erlaubt optimierte Versionen EnumMap<K extends Enum<K>,V> und EnumSet<E extends Enum<E>> anstatt Bit-Felder immer EnumSet verwenden!

values() 6 Weiterhin wird für jedes enum eine statische Methode values() definiert, welche ein Array aller Konstanten liefert: for (Kartenfarbe f : Kartenfarbe.values()) { System.out.println(f); } Reihenfolge der Konstanten wie in der Deklaration des enums

Attribute 7 Konstanten können mit anderen Werten assoziiert werden, welche wie Attribute der enum-klasse behandelt werden. Dazu Konstruktor und getter-methoden definieren Konstruktoren müssen immer private sein

Attribute 7 Konstanten können mit anderen Werten assoziiert werden, welche wie Attribute der enum-klasse behandelt werden. Dazu Konstruktor und getter-methoden definieren Konstruktoren müssen immer private sein public enum Feld { FOREST("Wald",2), MEADOW("Wiese",2), MOUNTAIN("Berg",1); private final String typ; private final int ertrag; private Feld(String typ, int ertrag) { this.typ = typ; this.ertrag = ertrag; } public ertrag() { return ertrag; } }

Methoden 8 enum-klassen können auch Methoden definieren reguläre statische Methoden Methoden in Abhängigkeit der Konstante: Abstrakte Methode kann in Konstanten-abhängiger Deklaration spezifiziert werden enum-klassen können somit Interfaces implementieren, wodurch man enum-typen zusammenfassen kann. Man sollte switch in Methoden der enum-klasse möglichst vermeiden, da Änderung der Konstanten dann kein Fehler beim Kompilieren liefert! Syntax: nach case nur Konstante angeben

Zusammenfassung 9 Alle Optionen vor Kompilation bekannt Optionen können sich mit Programmversion ändern enum Deklaration generiert Klasse mit statischen Instanzen (kein öffentlicher Konstruktor) Konstanten sind automatisch geordnet Nützliche Methoden automatisch generiert, z.b. values() EnumSet anstatt Bit-Felder verwenden Werte über EnumMap oder Attribute assoziieren

Quellen 10 Effective Java (2nd Edition) von Joshua Bloch, Addison-Wesley Verlag, 2008 Vorlesungsfolien zum Softwareentwicklungspraktikum, Wintersemester 2008/09, LMU München Dokumentation der Java, Platform Standard Edition 7, von Oracle http://docs.oracle.com/javase/7/docs/api/