Menu
Coddy logo textTech

Enums und Enum-Methoden

Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 50 von 87.

Ein enum (Aufzählung) ist ein spezieller Klassentyp, der eine feste Menge von Konstanten darstellt. Anstatt beliebige Ganzzahlen oder Zeichenfolgen zu verwenden, um Optionen wie Wochentage oder Bestellstati darzustellen, bieten enums typsichere, lesbare Werte.

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

Day today = Day.MONDAY;
System.out.println(today);  // Gibt aus: MONDAY

Enums sind mehr als einfache Konstanten – sie sind vollwertige Klassen. Sie können ihnen Felder, Konstruktoren und Methoden hinzufügen:

enum Size {
    SMALL(10), MEDIUM(20), LARGE(30);
    
    private int price;
    
    Size(int price) {
        this.price = price;
    }
    
    public int getPrice() {
        return price;
    }
}

System.out.println(Size.MEDIUM.getPrice());  // Ausgabe: 20

Jedes Enum verfügt über nützliche integrierte Methoden. Die Methode values() gibt ein Array aller Konstanten zurück, während valueOf() einen String in die entsprechende Enum-Konstante konvertiert. Die Methode ordinal() gibt die Position der Konstante zurück (beginnend bei 0):

for (Day d : Day.values()) {
    System.out.println(d + " is at position " + d.ordinal());
}

Day day = Day.valueOf("FRIDAY");  // Konvertiert String in Enum

Enums sind ideal, wenn Sie eine bekannte, feste Menge an Werten haben, die sich zur Laufzeit nicht ändern, was Ihren Code sicherer und aussagekräftiger macht als die Verwendung von einfachen Konstanten.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Bestellsystem für ein Café bauen, das die Leistungsfähigkeit von Enums mit Feldern, Konstruktoren und Methoden demonstriert. Sie werden ein CoffeeSize-Enum erstellen, das Preisinformationen speichert, sowie ein System zur Verarbeitung von Kundenbestellungen.

Sie werden Ihren Code über drei Dateien organisieren:

  • CoffeeSize.java: Erstellen Sie ein Enum, das Kaffeegrößen mit zugehörigen Preisen darstellt. Ihr Enum sollte drei Konstanten haben: SMALL, MEDIUM und LARGE mit Preisen von 2.50, 3.50 bzw. 4.50.

    Jede Größe benötigt ein privates price-Feld (double), einen Konstruktor, um dieses zu setzen, und eine getPrice()-Methode, um es abzurufen. Fügen Sie außerdem eine getDescription()-Methode hinzu, die einen String im Format: [size name] - $[price] zurückgibt (zum Beispiel: SMALL - $2.5)

  • Order.java: Erstellen Sie eine Klasse, die eine Kaffeebestellung repräsentiert. Eine Order hat zwei private Felder: customerName (String) und size (CoffeeSize). Fügen Sie einen Konstruktor zur Initialisierung beider Felder und Getter-Methoden für jedes Feld hinzu.

    Fügen Sie eine getReceipt()-Methode hinzu, die einen mehrzeiligen String zurückgibt:

    Order for: [customerName]
    Size: [size description from getDescription()]
    Total: $[price from the size]
  • Main.java: Erwecken Sie Ihr Café zum Leben! Sie erhalten zwei Eingaben: einen Kundennamen (String) und einen Größen-Namen (String wie "SMALL", "MEDIUM" oder "LARGE").

    Verwenden Sie zuerst CoffeeSize.valueOf(), um den Größen-String in die entsprechende Enum-Konstante umzuwandeln. Erstellen Sie eine Order mit dem Kundennamen und der Größe und geben Sie dann den Beleg aus.

    Geben Sie nach dem Drucken des Belegs eine Leerzeile aus und zeigen Sie dann das vollständige Menü an, indem Sie mit der Methode values() über alle CoffeeSize-Werte iterieren. Geben Sie für jede Größe deren Beschreibung in einer separaten Zeile aus.

Sie erhalten zwei Eingaben in dieser Reihenfolge: Kundenname und Größen-Name (einer von "SMALL", "MEDIUM" oder "LARGE").

Beachten Sie, wie das Enum sowohl die Identität der Größe als auch den zugehörigen Preis kapselt – viel sauberer als die Verwendung separater Konstanten oder magischer Zahlen in Ihrem gesamten Code!

Spickzettel

Ein enum ist ein spezieller Klassentyp, der eine feste Menge von Konstanten darstellt und typsichere, lesbare Werte bietet:

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

Day today = Day.MONDAY;
System.out.println(today);  // Ausgabe: MONDAY

Enums können Felder, Konstruktoren und Methoden besitzen:

enum Size {
    SMALL(10), MEDIUM(20), LARGE(30);
    
    private int price;
    
    Size(int price) {
        this.price = price;
    }
    
    public int getPrice() {
        return price;
    }
}

System.out.println(Size.MEDIUM.getPrice());  // Ausgabe: 20

Integrierte Enum-Methoden:

  • values() - gibt ein Array aller Enum-Konstanten zurück
  • valueOf(String) - konvertiert einen String in die entsprechende Enum-Konstante
  • ordinal() - gibt die Position der Konstante zurück (beginnend bei 0)
for (Day d : Day.values()) {
    System.out.println(d + " is at position " + d.ordinal());
}

Day day = Day.valueOf("FRIDAY");  // Konvertiert String in Enum

Probier es selbst

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Eingaben lesen
        String customerName = scanner.nextLine();
        String sizeName = scanner.nextLine();
        
        // TODO: Konvertiere sizeName in das CoffeeSize Enum unter Verwendung von valueOf()
        
        // TODO: Erstelle eine Order mit dem Kundennamen und der Größe
        
        // TODO: Drucke den Beleg aus
        
        // TODO: Drucke eine Leerzeile
        
        // TODO: Zeige das vollständige Menü an, indem du alle CoffeeSize Werte durchläufst
        // Hint: Verwende CoffeeSize.values(), um alle Enum-Konstanten zu erhalten
        
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung