Jadual Kandungan
Mengapa Generik? Had Tatasusunan
Langkah 1: Menentukan Kelas Buah
Rasional Kelas Abstrak
Langkah 2: Mencipta Troli Beli-belah Generik
Langkah 3: Menggunakan Troli Beli-belah
Kelebihan Generik
Kesimpulan
? Rujukan
? Berhubung Dengan Saya
Rumah Java javaTutorial Memahami Generik dalam Java: Contoh Troli Beli-belah dengan Kelas Tersuai

Memahami Generik dalam Java: Contoh Troli Beli-belah dengan Kelas Tersuai

Jan 20, 2025 pm 10:14 PM

Understanding Generics in Java: A Shopping Cart Example with Custom Classes

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.


Mengapa Generik? Had Tatasusunan

Tatasusunan Java adalah khusus jenis; tatasusunan satu jenis tidak boleh menyimpan elemen lain:

String[] fruits = new String[3];
fruits[0] = "Apple";  // Correct
fruits[1] = 123;      // Compile-time error

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.


Langkah 1: Menentukan Kelas Buah

Kami akan mentakrifkan kelas Fruit asas dan subkelas untuk Pisang, Epal dan Anggur, masing-masing dengan sifat unik.

// 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");
    }
}

Rasional Kelas Abstrak

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!


Langkah 2: Mencipta Troli Beli-belah Generik

Sekarang, mari kita bina kelas ShoppingCart menggunakan generik untuk memegang sebarang jenis buah sambil mengekalkan keselamatan jenis.

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());
        }
    }
}

T extends Fruit memastikan hanya Fruit atau keturunannya boleh ditambah, mengelakkan ralat jenis.


Langkah 3: Menggunakan Troli Beli-belah

Mari kita lihat cara menggunakan ShoppingCart dengan objek buah-buahan kita.

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();
    }
}

Kelebihan Generik

  1. Keselamatan Jenis: Mengehadkan T menghalang penambahan jenis yang salah.
  2. Fleksibiliti: Troli mengendalikan sebarang jenis Fruit, menggalakkan kebolehgunaan semula.
  3. Tiada Penghantaran: Mendapatkan semula item tidak memerlukan penghantaran, mengurangkan ralat masa jalan.

Kesimpulan

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.


? Rujukan

  • Dokumentasi Java Generics
  • Java Berkesan (Joshua Bloch)

? Berhubung Dengan Saya

  • LinkedIn
  • GitHub
  • Portfolio

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Skop pembolehubah PHP dijelaskan
4 minggu yang lalu By 百草
Petua untuk menulis komen php
4 minggu yang lalu By 百草
Mengulas kod dalam php
4 minggu yang lalu By 百草

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1510
276
Bagaimanakah hashmap berfungsi secara dalaman di Java? Bagaimanakah hashmap berfungsi secara dalaman di Java? Jul 15, 2025 am 03:10 AM

HashMap melaksanakan penyimpanan pasangan nilai utama melalui jadual hash di Java, dan terasnya terletak di lokasi data yang cepat. 1. Mula -mula gunakan kaedah hashcode () kunci untuk menghasilkan nilai hash dan mengubahnya menjadi indeks array melalui operasi bit; 2 Objek yang berbeza boleh menghasilkan nilai hash yang sama, mengakibatkan konflik. Pada masa ini, nod dipasang dalam bentuk senarai yang dipautkan. Selepas JDK8, senarai yang dipautkan terlalu panjang (panjang lalai 8) dan ia akan ditukar kepada pokok merah dan hitam untuk meningkatkan kecekapan; 3. Apabila menggunakan kelas tersuai sebagai kunci, sama () dan kaedah hashcode () mesti ditulis semula; 4. HashMap secara dinamik mengembangkan kapasiti. Apabila bilangan elemen melebihi kapasiti dan multiplies oleh faktor beban (lalai 0.75), mengembangkan dan mengembalikan; 5. hashmap tidak selamat benang, dan concu harus digunakan dalam multithreaded

Penanda aras prestasi benang maya java Penanda aras prestasi benang maya java Jul 21, 2025 am 03:17 AM

Benang maya mempunyai kelebihan prestasi yang signifikan dalam senario yang sangat konkurensi dan intensif, tetapi perhatian harus dibayar kepada kaedah ujian dan senario yang berkenaan. 1. Ujian yang betul harus mensimulasikan perniagaan sebenar, terutamanya senario menyekat IO, dan menggunakan alat seperti JMH atau Gatling untuk membandingkan benang platform; 2. Jurang throughput adalah jelas, dan boleh beberapa kali hingga sepuluh kali lebih tinggi daripada 100,000 permintaan serentak, kerana ia lebih ringan dan cekap dalam penjadualan; 3. Semasa ujian, adalah perlu untuk mengelakkan membabi buta mengejar nombor konvensional yang tinggi, menyesuaikan diri dengan model IO yang tidak menyekat, dan memberi perhatian kepada petunjuk pemantauan seperti latensi dan GC; 4.

cara menetapkan pembolehubah persekitaran java_home di tingkap cara menetapkan pembolehubah persekitaran java_home di tingkap Jul 18, 2025 am 04:05 AM

Tosetjava_homeonwindows, firstlocatethejdkinstallationpath (mis., C: \ Programfiles \ java \ jdk-17), thencreateasystemenvironmentvaria blenamedjava_homewiththatpath.next, updateThePathvariableByadding%java \ _home%\ bin, andverifythesetupingjava-versionandjavac-v

Java Microservices Perkhidmatan Mesh Integrasi Java Microservices Perkhidmatan Mesh Integrasi Jul 21, 2025 am 03:16 AM

ServiceMesh adalah pilihan yang tidak dapat dielakkan untuk evolusi seni bina microservice Java, dan terasnya terletak pada decoupling logik rangkaian dan kod perniagaan. 1. ServiceMesh mengendalikan pengimbangan beban, fius, pemantauan dan fungsi lain melalui agen sidecar untuk memberi tumpuan kepada perniagaan; 2. INTOR ISTIO sesuai untuk projek sederhana dan besar, dan Linkerd lebih ringan dan sesuai untuk ujian berskala kecil; 3. Java microservices harus menutup, reben dan komponen lain dan menyerahkannya kepada Istiod untuk penemuan dan komunikasi; 4. Memastikan suntikan automatik sidecar semasa penempatan, perhatikan konfigurasi peraturan lalu lintas, keserasian protokol, dan pembinaan sistem penjejakan log, dan mengamalkan penghijrahan tambahan dan perancangan pemantauan pra-kawalan.

Bagaimana menangani transaksi di Java dengan JDBC? Bagaimana menangani transaksi di Java dengan JDBC? Aug 02, 2025 pm 12:29 PM

Untuk mengendalikan transaksi JDBC dengan betul, anda mesti terlebih dahulu mematikan mod komit automatik, kemudian melakukan pelbagai operasi, dan akhirnya melakukan atau mengembalikan semula hasilnya; 1. Panggil Conn.SetAutOcommit (palsu) untuk memulakan transaksi; 2. Melaksanakan pelbagai operasi SQL, seperti memasukkan dan mengemaskini; 3. Panggil Conn.Commit () jika semua operasi berjaya, dan hubungi conn.rollback () jika pengecualian berlaku untuk memastikan konsistensi data; Pada masa yang sama, cuba-dengan-sumber harus digunakan untuk menguruskan sumber, mengendalikan pengecualian dengan betul dan menutup sambungan untuk mengelakkan kebocoran sambungan; Di samping itu, adalah disyorkan untuk menggunakan kolam sambungan dan menetapkan mata simpan untuk mencapai rollback separa, dan menyimpan urus niaga sesingkat mungkin untuk meningkatkan prestasi.

Melaksanakan senarai yang dipautkan di Java Melaksanakan senarai yang dipautkan di Java Jul 20, 2025 am 03:31 AM

Kunci untuk melaksanakan senarai yang dipautkan adalah untuk menentukan kelas nod dan melaksanakan operasi asas. ①First Buat kelas nod, termasuk data dan rujukan kepada nod seterusnya; ② Kemudian buat kelas LinkedList, melaksanakan fungsi penyisipan, penghapusan dan percetakan; Kaedah tambahan digunakan untuk menambah nod pada ekor; ④ Kaedah PrintList digunakan untuk mengeluarkan kandungan senarai yang dipautkan; ⑤ Kaedah DeletewithValue digunakan untuk memadam nod dengan nilai tertentu dan mengendalikan situasi yang berbeza dari nod kepala dan nod perantaraan.

Bagaimana cara memformat tarikh di Java dengan SimpledateFormat? Bagaimana cara memformat tarikh di Java dengan SimpledateFormat? Jul 15, 2025 am 03:12 AM

Buat dan gunakan SimpledateFormat memerlukan lulus dalam rentetan format, seperti berita yang tidak terkumpul ("Yyyy-mm-ddhh: mm: ss"); 2. Perhatikan kepekaan kes dan elakkan penyalahgunaan format satu huruf bercampur dan Yyyy dan DD; 3. SimpleDateFormat bukanlah benang-selamat. Dalam persekitaran pelbagai thread, anda harus membuat contoh baru atau menggunakan threadlocal setiap kali; 4. Apabila menghuraikan rentetan menggunakan kaedah parse, anda perlu menangkap parseexception, dan perhatikan bahawa hasilnya tidak mengandungi maklumat zon waktu; 5. Adalah disyorkan untuk menggunakan DateTimeFormatter dan Lo

Pengoptimuman Rangka Kerja Koleksi Lanjutan Pengoptimuman Rangka Kerja Koleksi Lanjutan Jul 20, 2025 am 03:48 AM

Untuk meningkatkan prestasi Rangka Kerja Koleksi Java, kami dapat mengoptimumkan dari empat mata berikut: 1. Pilih jenis yang sesuai mengikut senario, seperti akses rawak yang kerap ke ArrayList, carian cepat ke hashset, dan serentak untuk persekitaran serentak; 2. Menetapkan kapasiti dan faktor beban yang munasabah semasa permulaan untuk mengurangkan overhead pengembangan kapasiti, tetapi elakkan sisa memori; 3. Gunakan set yang tidak berubah (seperti list.of ()) untuk meningkatkan keselamatan dan prestasi, sesuai untuk data tetap atau baca sahaja; 4. Mencegah kebocoran memori, dan gunakan rujukan lemah atau perpustakaan cache profesional untuk menguruskan set survival jangka panjang. Butiran ini memberi kesan ketara kepada kestabilan dan kecekapan program.

See all articles