Generik Java adalah penting untuk menulis kod yang selamat jenis dan boleh digunakan semula. Ia membolehkan penciptaan kelas, kaedah dan antara muka yang boleh mengendalikan pelbagai jenis data, meningkatkan keteguhan dan fleksibiliti kod. Artikel ini menggambarkan generik menggunakan contoh troli beli-belah yang menyimpan jenis buah-buahan yang berbeza, diwakili oleh kelas tersuai.
Tatasusunan Java adalah khusus jenis; tatasusunan satu jenis tidak boleh menyimpan elemen lain:
<code class="language-java">String[] fruits = new String[3]; fruits[0] = "Apple"; // Correct fruits[1] = 123; // Compile-time error</code>
Keselamatan jenis ini bermanfaat, tetapi tatasusunan kurang fleksibiliti. Mencipta troli beli-belah untuk pelbagai buah-buahan (pisang, epal, anggur) menggunakan tatasusunan memerlukan pengendalian jenis manual yang menyusahkan.
Generik menawarkan penyelesaian: struktur data yang fleksibel namun selamat jenis. Mari kita bina ini, bermula dengan kelas Buah-buahan tersuai.
Kami akan mentakrifkan kelas Fruit
asas dan subkelas untuk Pisang, Epal dan Anggur, masing-masing dengan sifat unik.
<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>
Kelas Fruit
adalah abstrak untuk menyediakan kefungsian biasa (seperti name
) dan mewujudkan struktur warisan yang jelas. Antara muka mungkin lebih baik jika berbilang warisan atau kontrak yang lebih mudah diperlukan. Ini memerlukan perbincangan lanjut!
Sekarang, mari kita bina kelas ShoppingCart
menggunakan generik untuk memegang sebarang jenis buah sambil mengekalkan keselamatan jenis.
<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
memastikan hanya Fruit
atau keturunannya boleh ditambah, mengelakkan ralat jenis.
Mari kita lihat cara menggunakan ShoppingCart
dengan objek buah-buahan kita.
<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
menghalang penambahan jenis yang salah.Fruit
, menggalakkan kebolehgunaan semula. Fruit
hierarki dan ShoppingCart
contoh ini menunjukkan kuasa dan fleksibiliti generik Java. Generik meningkatkan kejelasan dan kebolehselenggaraan kod, menjadikannya tidak ternilai untuk pembangun Java di semua peringkat.
Atas ialah kandungan terperinci Memahami Generik dalam Java: Contoh Troli Beli-belah dengan Kelas Tersuai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!