首頁 >Java >java教程 >了解 Java 中的泛型:帶有自訂類別的購物車範例

了解 Java 中的泛型:帶有自訂類別的購物車範例

Barbara Streisand
Barbara Streisand原創
2025-01-20 22:14:131061瀏覽

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

Java 泛型對於編寫類型安全、可重複使用的程式碼至關重要。 它們支援創建可以處理​​各種資料類型的類別、方法和接口,從而增強程式碼的穩健性和靈活性。本文使用購物車範例來說明泛型,該購物車範例儲存由自訂類別表示的不同水果類型。


為什麼是泛型?數組的局限性

Java 陣列是特定於類型的;一種類型的陣列不能容納另一種類型的元素:

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

這種類型安全性是有益的,但陣列缺乏靈活性。 使用陣列創建各種水果(香蕉、蘋果、葡萄)的購物車需要繁瑣的手動類型處理。

泛型提供了一個解決方案:靈活且類型安全的資料結構。讓我們從自訂 Fruit 類別開始建立它。


第 1 步:定義水果類

我們將為 Banana、Apple 和 Grape 定義一個基底 Fruit 類別和子類,每個類別都有獨特的屬性。

<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>

抽象類別基本原理

Fruit 類別是抽象的,提供通用功能(如 name)並建立清晰的繼承結構。 如果需要多重繼承或更簡單的契約,則介面可能更可取。這值得進一步討論!


第 2 步:建立通用購物車

現在,讓我們使用泛型來建立一個 ShoppingCart 類別來保存任何水果類型,同時保持類型安全。

<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 確保只能添加​​ Fruit 或其後代,防止類型錯誤。


第 3 步:使用購物車

讓我們看看如何將 ShoppingCart 與我們的水果物件一起使用。

<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>

泛型的優點

  1. 類型安全: 限制 T 防止添加不正確的類型。
  2. 彈性: 購物車可處理任何 Fruit 類型,提高可重複使用性。
  3. 無轉換:檢索項目不需要轉換,減少執行階段錯誤。

結論

這個 Fruit 層次結構和 ShoppingCart 範例示範了 Java 泛型的強大功能和靈活性。 泛型增強了程式碼的清晰度和可維護性,使它們對於各個層級的 Java 開發人員來說都是無價的。


?參考文獻

  • Java 泛型文件
  • 高效率 Java (Joshua Bloch)

?與我聯絡

  • 領英
  • GitHub
  • 投資組合

以上是了解 Java 中的泛型:帶有自訂類別的購物車範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn