ホームページ >Java >&#&チュートリアル >Java のジェネリックスを理解する: カスタム クラスを使用したショッピング カートの例

Java のジェネリックスを理解する: カスタム クラスを使用したショッピング カートの例

Barbara Streisand
Barbara Streisandオリジナル
2025-01-20 22:14:131004ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。