Heim >Java >javaLernprogramm >Generics in Java verstehen: Ein Warenkorb-Beispiel mit benutzerdefinierten Klassen
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.
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.
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>
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!
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.
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>
T
wird das Hinzufügen falscher Typen verhindert.Fruit
Typ und fördert so die Wiederverwendbarkeit.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.
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!