ホームページ >Java >&#&チュートリアル >Java のジェネリックスを理解する: カスタム クラスを使用したショッピング カートの例
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 中国語 Web サイトの他の関連記事を参照してください。