首页 > Java > java教程 > 了解 Java 中的泛型:带有自定义类的购物车示例

了解 Java 中的泛型:带有自定义类的购物车示例

Barbara Streisand
发布: 2025-01-20 22:14:13
原创
1000 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板