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

Mengapakah Saya Tidak Boleh Mencipta Tatasusunan Senarai Generik dalam Java?

Barbara Streisand
Barbara Streisandasal
2024-11-03 17:24:30188semak imbas

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

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 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];

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!

Kenyataan:
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