Posted on Leave a comment

Enums in Java: Datenstrukturen für konstante Werte

Enums in Java: Datenstrukturen für konstante Werte

Die Programmiersprache Java bietet viele Möglichkeiten, um die Werte im Programm zu strukturieren. Hierfür kommen häufig Klassen zum Einsatz. Es gibt jedoch noch weitere Möglichkeiten. In vielen Fällen bietet es sich an, enums zu nutzen. Wenn Sie Strukturen mit konstanten Werten verwenden möchten, bieten diese viele Vorteile. In diesem Artikel erfahren Sie, was enums auszeichnet und wie Sie diese anwenden.

Java Kompendium 19.99 € Verfügbar In den Warenkorb

Was sind enums?

Um mit enums zu arbeiten, ist es zunächst notwendig, genau zu verstehen, was diese Datenstruktur auszeichnet. Sie sind ähnlich wie Klassen aufgebaut. Während bei einer Klasse die Attribute ihre Werte jedoch verändern können, sind sie bei einem enum fest. Wenn Sie diese einmal vorgegeben haben, können Sie sie nicht mehr verändern. Daher eignen sie sich für alle Strukturen, die unveränderliche Werte aufweisen.

Darüber hinaus bestehen noch weitere Unterschiede zu Klassen. Beispielsweise ist es mit enums nicht möglich, Objekte zu erzeugen. Außerdem sind alle Optionen öffentlich zugänglich. Das bedeutet, dass Sie diese Angaben im Gegensatz zu Klassen nicht kapseln können. Allerdings ist es auch hierbei möglich, Member-Variablen zu nutzen. Dabei können Sie die Daten kapseln. Ein weiterer Unterschied besteht darin, dass Sie enums nicht von anderen Klassen ableiten können. Dennoch ist auch hierbei eine Form der Vererbung möglich. Wenn Sie ein Interface bestimmen, können Sie anhand dieser Vorgaben ein enum implementieren.

Enums im Programm verwenden

Nachdem Sie die grundsätzlichen Eigenschaften von enums kennengelernt haben, besteht der nächste Schritt darin, sie im Programm anzuwenden. Hierfür lernen Sie zunächst verschiedene Möglichkeiten kennen, um das enum zu gestalten und im Programm anzuwenden. Danach werden einige weitere Anwendungsfälle vorgestellt.

Einfache enums mit einer Auflistung konstanter Bezeichner

Für unser Beispiel gehen wir davon aus, dass ein Unternehmen ein Programm für die Verwaltung der Mitarbeiter erstellt. Für die Arbeiter und Angestellten verwendet es feste Gehaltskategorien. Da es sich hierbei um feste Gruppen handelt, bietet es sich an, enums dafür zu verwenden. Genau wie Klassen definieren wir enums außerhalb des Hauptprogramms. Um sie zu erzeugen, müssen wir sie mit dem Schlüsselbegriff enum einleitet. Danach folgt ein Bezeichner, den Sie frei wählen können. Daran schließt sich eine geschweifte Klammer an, in der Sie die möglichen Werte auflisten können. Sie sind jeweils durch ein Komma voneinander getrennt:

Nachdem wir das enum definiert haben, können wir damit im Hauptprogramm eine Variable erstellen. Als Datentyp müssen wir hierbei den Namen des enums wählen. Über den Zuweisungsoperator können Sie dann einen Wert vorgeben. Hierfür müssen Sie wieder den Namen des enums angeben und nach einem Punkt die Option, die Sie hierfür auswählen:

Gehaltskategorien mitarbeiter = Gehaltskategorien.C;

Es ist nicht nur möglich, diese Angabe in einer separaten Variable abzuspeichern. Häufig findet sie auch bei der Erstellung einer Klasse Verwendung. Wenn Sie beispielsweise eine Klasse für die Mitarbeiter des Unternehmens erstellen, können Sie neben Attributen für dessen persönliche Daten auch ein Attribut mit der Gehaltsklasse erstellen und dafür das enum verwenden. Da dies den Umfang des Programms jedoch deutlich erhöhen würde, verzichten wir hier darauf.

Nun stellt sich noch die Frage, wofür wir diese Variable in unserem Programm verwenden können. Sehr häufig kommen enums beispielsweise dazu zum Einsatz, um ein switch-Statement zu gestalten. Dabei ist es möglich, für jede der definierten Optionen eine bestimmte Aktion vorzugeben. Das zeigen wir nun, indem wir das Jahresgehalt der einzelnen Gehaltsklassen ausgeben. Als Variable, die wir im switch-Statement für die Überprüfung heranziehen, verwenden wir diejenige, die wir anhand des enums erzeugt haben – in unserem Fall also mitarbeiter. Für die einzelnen Fälle können wir dann einfach die entsprechenden Optionen auswählen:

Nun können wir diese einzelnen Teile des Programms zusammenfügen und noch einige ergänzende Textausgaben hinzufügen. Danach sieht der Code wie folgt aus. Das Verhalten des Programms können Sie in der darauffolgenden Abbildung erkennen.

Enums mit konstanten Werten

Enums bieten nicht nur die Möglichkeit, Kategorien vorzugeben. Darüber hinaus können Sie diesen auch Werte zuordnen. Dabei müssen Sie beachten, dass es sich hierbei um feste Werte handelt, die sich nicht verändern lassen. Wir könnten unser Programm beispielsweise so erweitern, dass wir das Jahresgehalt direkt im enum angeben und fest mit der entsprechenden Auswahlmöglichkeit verbinden.

Zu diesem Zweck müssen Sie die entsprechenden Werte in einer Klammer bei der jeweiligen Option angeben. Nachdem Sie die letzte Option eingefügt haben, müssen Sie darauf achten, dass in diesem Fall ein Semikolon erforderlich ist, um die Auflistung abzuschließen:

Im nächsten Schritt ist es notwendig, anzugeben, unter welcher Bezeichnung wir die entsprechenden Angaben verfügbar machen wollen. Dieser Schritt ist identisch zur Deklaration einer Member-Variablen in einer Klasse. Im Sinne der Datenkapselung ist es sinnvoll, diesen Wert als private zu deklarieren:

private int gehalt;

In diesem Fall benötigen wir jedoch auch einen Konstruktor. Dieser ist sehr ähnlich aufgebaut wie bei einer Klasse: Er erhält einen Übergabewert, den wir der entsprechenden Member-Variable zuweisen. Der wesentliche Unterschied zum Konstruktor einer Klasse tritt erst später auf – wenn wir das enum im Hauptprogramm anwenden und dabei den Konstruktor aufrufen. Hierbei geben wir keinen expliziten Übergabewert vor. Dieser wird automatisch vorgegeben – abhängig von der Option, die wir ausgewählt haben. Auf den Aufbau des Konstruktors hat dies jedoch keinen Einfluss, sodass wir ihn wie bei einer gewöhnlichen Klasse erstellen:

Gehaltskategorien(final int gehalt){
    this.gehalt = gehalt;
}

Da die Member-Variable nicht öffentlich zugänglich ist, müssen wir außerdem eine Methode erstellen, um darauf zugreifen zu können. Auch das ist bei enums möglich – auf die gleiche Weise wie bei Klassen.

public int getGehalt(){
    return this.gehalt;
}

Diese Methode erlaubt es uns, im Hauptprogramm auf den entsprechenden Wert zuzugreifen. Das gestaltet die Ausgabe des Gehalts etwas einfacher. Das folgende Programm erfüllt genau die gleiche Aufgabe wie das Programm aus dem letzten Abschnitt. Auch die Ausgabe ist identisch. Der Code ist jedoch wesentlich kompakter:

Java Kompendium 19.99 € Verfügbar In den Warenkorb

Enums mit mehreren Werten erstellen

Bei der Verwendung von enums ist es auch möglich, mehrere Werte mit den einzelnen Optionen zu verbinden – immer vorausgesetzt, dass es sich hierbei um konstante Werte handelt. Auch das soll an einem Beispiel gezeigt werden. Dafür gehen wir davon aus, dass das Unternehmen einigen Mitarbeitern einen zusätzlichen Bonus zahlen will. Dieser soll jedoch nicht alle Gehaltskategorien betreffen. Um festzuhalten, in welchen Kategorien der Bonus bezahlt werden soll, halten wir diesen Wert bei den einzelnen Optionen mit einer booleschen Variable fest.

Hierzu müssen wir in der Klammer nach den einzelnen Optionen zusätzlich zum Gehalt den gewünschten Wert der Variable hinzufügen. Außerdem ist es notwendig, eine zweite Member-Variable hinzuzufügen. Der Konstruktor erhält hierbei zwei Übergabewerte – in der gleichen Reihenfolge wie wir sie bei der Auflistung der Optionen angegeben haben.

Außerdem ist es notwendig, eine weitere Methode für den Abruf des entsprechenden Werts einzufügen. Im Hauptprogramm können wir diese dann aufrufen. Da all diese Aufgaben relativ ähnlich zur Vorgehensweise aus dem letzten Abschnitt sind, sind hierfür keine weiteren Erklärungen notwendig. Wir geben lediglich den entsprechenden Programmcode an:

For-Schleifen für die Darstellung des gesamten enums

In vielen Fällen ist es notwendig, das gesamte enum auszugeben – beispielsweise um die vorhandenen Optionen aufzuzeigen. Hierbei ist es möglich, eine Iteration durchzuführen – im Rahmen einer enhanced for-loop, die Sie wahrscheinlich von der Arbeit mit Arrays kennen. Allerdings können Sie das enum nicht direkt für die Iteration verwenden. Es ist notwendig, die values()-Methode darauf anzuwenden. Davon abgesehen ist die Vorgehensweise jedoch genau die gleiche wie bei Arrays:

An der oben dargestellten Abbildung erkennen Sie, dass hierbei die einzelnen Optionen dargestellt werden. Sie haben aber auch die Möglichkeit, Methoden auf die Variable kategorie anzuwenden, um die zugehörigen Werte auszugeben. Das soll nun ebenfalls dargestellt werden. Dazu geben wir die einzelnen Optionen zusammen mit dem zugehörigen Gehalt aus.

Weitere Anwendungsmöglichkeiten für enums

Hiermit haben Sie die wesentlichen Aspekte für die Verwendung von enums bereits kennengelernt. Abschließend wollen wir noch kurz der Frage nachgehen, in welchen Fällen es sinnvoll ist, diese Datenstruktur zu verwenden. In unserem Beispiel haben wir bereits eine häufige Verwendungsmöglichkeit vorgestellt. Wenn Sie feste Kategorien für einen bestimmten Sachverhalt definieren, ist es sinnvoll, hierfür enums zu erstellen. Das erleichtert die Anwendung deutlich. Dies ist beispielsweise bei Programmen sinnvoll, die bestimmte Messwerte ermitteln – entweder in einem wissenschaftlichen oder in einem industriellen Umfeld. Mit enums ist es möglich, die ermittelten Werte in Kategorien einzuordnen und mit den zugehörigen Aktionen zu verbinden.

Auch für die Arbeit mit Datumsangaben kommen enums häufig zum Einsatz. Damit lassen sich beispielsweise die einzelnen Wochentage definieren. Für die Bearbeitung der Monatsangaben bieten sich enums ebenfalls an. Grundsätzlich bieten enums immer dann Vorteile, wenn Sie eine endliche Menge an unterschiedlichen Optionen mit konstanten Eigenschaften bearbeiten.

Ähnliche Produkte

Schreibe einen Kommentar