Heim >Java >javaLernprogramm >Generics in Java verstehen: Ein Warenkorb-Beispiel mit benutzerdefinierten Klassen

Generics in Java verstehen: Ein Warenkorb-Beispiel mit benutzerdefinierten Klassen

Barbara Streisand
Barbara StreisandOriginal
2025-01-20 22:14:131035Durchsuche

Understanding Generics in Java: A Shopping Cart Example with Custom Classes

Java-Generika sind für das Schreiben von typsicherem, wiederverwendbarem Code unerlässlich. Sie ermöglichen die Erstellung von Klassen, Methoden und Schnittstellen, die verschiedene Datentypen verarbeiten können, wodurch die Robustheit und Flexibilität des Codes erhöht wird. Dieser Artikel veranschaulicht Generika anhand eines Einkaufswagenbeispiels, in dem verschiedene Fruchtarten gespeichert sind, dargestellt durch benutzerdefinierte Klassen.


Warum Generika? Die Einschränkungen von Arrays

Java-Arrays sind typspezifisch; Ein Array eines Typs kann keine Elemente eines anderen Typs enthalten:

<code class="language-java">String[] fruits = new String[3];
fruits[0] = "Apple";  // Correct
fruits[1] = 123;      // Compile-time error</code>

Diese Art von Sicherheit ist vorteilhaft, aber Arrays mangelt es an Flexibilität. Das Erstellen eines Warenkorbs für verschiedene Früchte (Bananen, Äpfel, Weintrauben) mithilfe von Arrays würde eine umständliche manuelle Typverarbeitung erfordern.

Generika bieten eine Lösung: flexible und dennoch typsichere Datenstrukturen. Lassen Sie uns dies erstellen, beginnend mit benutzerdefinierten Fruit-Klassen.


Schritt 1: Fruchtklassen definieren

Wir definieren eine Basisklasse Fruit und Unterklassen für Banana, Apple und Grape, jede mit einzigartigen Eigenschaften.

<code class="language-java">// Base class for fruits
public abstract class Fruit {
    private String name;

    public Fruit(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

// Specific fruit classes
public class Banana extends Fruit {
    public Banana() {
        super("Banana");
    }
}

public class Apple extends Fruit {
    public Apple() {
        super("Apple");
    }
}

public class Grape extends Fruit {
    public Grape() {
        super("Grape");
    }
}</code>

Abstrakte Klassenbegründung

Die Klasse Fruit ist abstrakt, um allgemeine Funktionen (wie name) bereitzustellen und eine klare Vererbungsstruktur festzulegen. Eine Schnittstelle könnte vorzuziehen sein, wenn Mehrfachvererbung oder einfachere Verträge erforderlich sind. Dies erfordert weitere Diskussion!


Schritt 2: Erstellen eines generischen Warenkorbs

Lassen Sie uns nun eine ShoppingCart Klasse erstellen, die Generika verwendet, um jede Fruchtart aufzunehmen und gleichzeitig die Typensicherheit zu wahren.

<code class="language-java">import java.util.ArrayList;

public class ShoppingCart<T extends Fruit> { // Restricts to Fruit and subclasses
    private ArrayList<T> items = new ArrayList<>();

    public void addItem(T item) {
        items.add(item);
    }

    public void removeItem(T item) {
        items.remove(item);
    }

    public void displayItems() {
        for (T item : items) {
            System.out.println(item.getName());
        }
    }
}</code>

T extends Fruit stellt sicher, dass nur Fruit oder seine Nachkommen hinzugefügt werden können, wodurch Typfehler vermieden werden.


Schritt 3: Den Warenkorb verwenden

Sehen wir uns an, wie man ShoppingCart mit unseren Obstobjekten verwendet.

<code class="language-java">public class Main {
    public static void main(String[] args) {
        ShoppingCart<Fruit> fruitCart = new ShoppingCart<>();

        // Adding fruits
        fruitCart.addItem(new Banana());
        fruitCart.addItem(new Apple());
        fruitCart.addItem(new Grape());

        // Displaying contents
        System.out.println("Shopping Cart:");
        fruitCart.displayItems();

        // Removing an item
        fruitCart.removeItem(new Apple()); // Removal based on object equality (equals() can be overridden)
        System.out.println("\nAfter removing Apple:");
        fruitCart.displayItems();
    }
}</code>

Vorteile von Generika

  1. Typsicherheit: Durch die Einschränkung T wird das Hinzufügen falscher Typen verhindert.
  2. Flexibilität: Der Wagen eignet sich für jeden Fruit Typ und fördert so die Wiederverwendbarkeit.
  3. Kein Casting: Das Abrufen von Elementen erfordert kein Casting, wodurch Laufzeitfehler reduziert werden.

Fazit

Diese Fruit Hierarchie und ShoppingCart Beispiel demonstriert die Leistungsfähigkeit und Flexibilität von Java-Generika. Generics verbessern die Klarheit und Wartbarkeit des Codes und machen sie für Java-Entwickler auf allen Ebenen von unschätzbarem Wert.


? Referenzen

  • Java Generics-Dokumentation
  • Effektives Java (Joshua Bloch)

? Verbinde dich mit mir

  • LinkedIn
  • GitHub
  • Portfolio

Das obige ist der detaillierte Inhalt vonGenerics in Java verstehen: Ein Warenkorb-Beispiel mit benutzerdefinierten Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn