Inhaltsverzeichnis
Warum Generika? Die Einschränkungen von Arrays
Schritt 1: Fruchtklassen definieren
Abstrakte Klassenbegründung
Schritt 2: Erstellen eines generischen Warenkorbs
Schritt 3: Den Warenkorb verwenden
Vorteile von Generika
Fazit
? Referenzen
? Verbinde dich mit mir
Heim Java javaLernprogramm Generics in Java verstehen: Ein Warenkorb-Beispiel mit benutzerdefinierten Klassen

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

Jan 20, 2025 pm 10:14 PM

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:

String[] fruits = new String[3];
fruits[0] = "Apple";  // Correct
fruits[1] = 123;      // Compile-time error
Nach dem Login kopieren

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.

// 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");
    }
}
Nach dem Login kopieren

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.

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());
        }
    }
}
Nach dem Login kopieren

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.

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();
    }
}
Nach dem Login kopieren

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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Verursacht die Sicherheitssoftware des Unternehmens, die die Anwendung nicht ausführt? Wie kann man es beheben und es lösen? Verursacht die Sicherheitssoftware des Unternehmens, die die Anwendung nicht ausführt? Wie kann man es beheben und es lösen? Apr 19, 2025 pm 04:51 PM

Fehlerbehebung und Lösungen für die Sicherheitssoftware des Unternehmens, die dazu führt, dass einige Anwendungen nicht ordnungsgemäß funktionieren. Viele Unternehmen werden Sicherheitssoftware bereitstellen, um die interne Netzwerksicherheit zu gewährleisten. ...

Wie vereinfachte ich Probleme mit der Feldzuordnung im Systemdocking mithilfe des Mapstruct? Wie vereinfachte ich Probleme mit der Feldzuordnung im Systemdocking mithilfe des Mapstruct? Apr 19, 2025 pm 06:21 PM

Die Verarbeitung von Feldzuordnungen im Systemdocken stößt häufig auf ein schwieriges Problem bei der Durchführung von Systemdocken: So kartieren Sie die Schnittstellenfelder des Systems und ...

Wie kann ich elegante Entitätsklassenvariablennamen erhalten, um Datenbankabfragebedingungen zu erstellen? Wie kann ich elegante Entitätsklassenvariablennamen erhalten, um Datenbankabfragebedingungen zu erstellen? Apr 19, 2025 pm 11:42 PM

Bei Verwendung von MyBatis-Plus oder anderen ORM-Frameworks für Datenbankvorgänge müssen häufig Abfragebedingungen basierend auf dem Attributnamen der Entitätsklasse erstellt werden. Wenn Sie jedes Mal manuell ...

Wie konvertiere ich Namen in Zahlen, um die Sortierung zu implementieren und die Konsistenz in Gruppen aufrechtzuerhalten? Wie konvertiere ich Namen in Zahlen, um die Sortierung zu implementieren und die Konsistenz in Gruppen aufrechtzuerhalten? Apr 19, 2025 pm 11:30 PM

Lösungen zum Umwandeln von Namen in Zahlen zur Implementierung der Sortierung in vielen Anwendungsszenarien müssen Benutzer möglicherweise in Gruppen sortieren, insbesondere in einem ...

Wie identifiziert Intellij IDEA die Portnummer eines Spring -Boot -Projekts, ohne ein Protokoll auszugeben? Wie identifiziert Intellij IDEA die Portnummer eines Spring -Boot -Projekts, ohne ein Protokoll auszugeben? Apr 19, 2025 pm 11:45 PM

Beginnen Sie den Frühling mit der Intellijideaultimate -Version ...

Wie kann ich Java -Objekte sicher in Arrays umwandeln? Wie kann ich Java -Objekte sicher in Arrays umwandeln? Apr 19, 2025 pm 11:33 PM

Konvertierung von Java-Objekten und -Arrays: Eingehende Diskussion der Risiken und korrekten Methoden zur Konvertierung des Guss-Typs Viele Java-Anfänger werden auf die Umwandlung eines Objekts in ein Array stoßen ...

E-Commerce-Plattform SKU und SPU-Datenbankdesign: Wie berücksichtigen Sie sowohl benutzerdefinierte Attribute als auch Attributloses Produkte? E-Commerce-Plattform SKU und SPU-Datenbankdesign: Wie berücksichtigen Sie sowohl benutzerdefinierte Attribute als auch Attributloses Produkte? Apr 19, 2025 pm 11:27 PM

Detaillierte Erläuterung des Designs von SKU- und SPU-Tabellen auf E-Commerce-Plattformen In diesem Artikel werden die Datenbankdesignprobleme von SKU und SPU in E-Commerce-Plattformen erörtert, insbesondere wie man mit benutzerdefinierten Verkäufen umgeht ...

Wie kann ich elegant den variablen Entitätsklassennamen erstellen, wenn Tkmybatis für Datenbankabfrage verwendet werden? Wie kann ich elegant den variablen Entitätsklassennamen erstellen, wenn Tkmybatis für Datenbankabfrage verwendet werden? Apr 19, 2025 pm 09:51 PM

Wenn Sie TKMybatis für Datenbankabfragen verwenden, ist das Aufbau von Abfragebedingungen ein häufiges Problem. Dieser Artikel wird ...

See all articles