Array Generik dan Misteri Pemadaman Jenis
Apabila bekerja dengan generik, ia boleh mengelirukan mengapa sesetengah pengisytiharan tatasusunan dibenarkan dan yang lain tidak 't. Pertimbangkan perkara berikut:
ArrayList<Key> a = new ArrayList<Key>(); // Compiles fine
Kod ini disusun tanpa masalah. Walau bagaimanapun, apabila ia datang kepada tatasusunan senarai generik:
ArrayList<Key>[] a = new ArrayList<Key>[10]; // Compiler error
pengkompil mengadu. Mengapakah ini berlaku?
Peranan Pemadaman Jenis
Isu ini berpunca daripada konsep pemadaman jenis di Jawa. Apabila jenis generik disusun, parameter jenisnya dialih keluar dan digantikan dengan jenis mentah. Ini bermakna pada masa jalan, semua jenis generik dianggap sebagai jenis mentah yang sepadan.
Dalam contoh pertama, ArrayList
Walau bagaimanapun, tatasusunan ialah cerita yang berbeza. Setiap elemen tatasusunan mesti mempunyai jenis yang sama. Jadi, ArrayList
Membetulkan Isu
Untuk menyelesaikan isu, seseorang boleh menghantar tatasusunan kepada jenis mentah yang jelas:
ArrayList<Key>[] a = (ArrayList<Key> []) new ArrayList[10];
Pelakon ini pada asasnya memberitahu pengkompil bahawa kami mahukan tatasusunan objek ArrayList mentah, yang merupakan jenis yang sah.
Menggunakan Senarai Bersarang
Pilihan lain ialah menggunakan senarai senarai:
ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>();
Dalam kes ini, b ialah senarai objek ArrayList, di mana setiap ArrayList boleh menyimpan elemen jenis Key. Pendekatan ini sah kerana ArrayList bukan jenis tatasusunan.
Maklumat Tambahan
Untuk mendapatkan maklumat lanjut tentang topik ini, rujuk Bab 7.3 tutorial Java rasmi. Ia menerangkan cara jenis tatasusunan tidak boleh mempunyai pembolehubah jenis sebagai komponennya, melainkan ia adalah jenis kad bebas.
Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Mencipta Tatasusunan Senarai Generik dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!