Java 泛型对于编写类型安全、可重用的代码至关重要。 它们支持创建可以处理各种数据类型的类、方法和接口,从而增强代码的稳健性和灵活性。本文使用购物车示例来说明泛型,该购物车示例存储由自定义类表示的不同水果类型。
Java 数组是特定于类型的;一种类型的数组不能容纳另一种类型的元素:
<code class="language-java">String[] fruits = new String[3]; fruits[0] = "Apple"; // Correct fruits[1] = 123; // Compile-time error</code>
这种类型安全性是有益的,但数组缺乏灵活性。 使用数组创建各种水果(香蕉、苹果、葡萄)的购物车需要繁琐的手动类型处理。
泛型提供了一个解决方案:灵活且类型安全的数据结构。让我们从自定义 Fruit 类开始构建它。
我们将为 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
)并建立清晰的继承结构。 如果需要多重继承或更简单的契约,则接口可能更可取。这值得进一步讨论!
现在,让我们使用泛型构建一个 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
或其后代,防止类型错误。
让我们看看如何将 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>
T
防止添加不正确的类型。Fruit
类型,提高可重用性。这个 Fruit
层次结构和 ShoppingCart
示例演示了 Java 泛型的强大功能和灵活性。 泛型增强了代码的清晰度和可维护性,使它们对于各个级别的 Java 开发人员来说都是无价的。
以上是了解 Java 中的泛型:带有自定义类的购物车示例的详细内容。更多信息请关注PHP中文网其他相关文章!