Rumah > Java > javaTutorial > Mengapakah Saya Tidak Boleh Mencipta Tatasusunan Senarai Generik dalam Java?

Mengapakah Saya Tidak Boleh Mencipta Tatasusunan Senarai Generik dalam Java?

Barbara Streisand
Lepaskan: 2024-11-03 17:24:30
asal
239 orang telah melayarinya

Why Can't I Create an Array of Generic Lists in Java?

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
Salin selepas log masuk

Kod ini disusun tanpa masalah. Walau bagaimanapun, apabila ia datang kepada tatasusunan senarai generik:

ArrayList<Key>[] a = new ArrayList<Key>[10]; // Compiler error
Salin selepas log masuk

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 ialah jenis generik, tetapi semasa runtime, ia dianggap sebagai ArrayList. Jadi, boleh menyimpan objek ArrayList dengan elemen jenis Key.

Walau bagaimanapun, tatasusunan ialah cerita yang berbeza. Setiap elemen tatasusunan mesti mempunyai jenis yang sama. Jadi, ArrayList[] memerlukan elemennya menjadi ArrayList, yang bukan jenis mentah. Pemadaman jenis tidak boleh mengalih keluar parameter generik, menjadikan pengisytiharan ini menyalahi undang-undang.

Membetulkan Isu

Untuk menyelesaikan isu, seseorang boleh menghantar tatasusunan kepada jenis mentah yang jelas:

ArrayList<Key>[] a = (ArrayList<Key> []) new ArrayList[10];
Salin selepas log masuk

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>>();
Salin selepas log masuk

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan