Tatasusunan generik menimbulkan cabaran unik di Jawa kerana konsep pemadaman jenis. Artikel ini meneroka perbezaan antara dua serpihan kod yang kelihatan serupa dan menerangkan sebab asas kelakuan pengkompil.
Pertimbangkan kod berikut:
<code class="java">ArrayList<Key> a = new ArrayList<Key>();</code>
Kod ini menyusun tanpa masalah, kerana ia mencipta contoh ArrayList
<code class="java">ArrayList<Key>[] a = new ArrayList<Key>[10];</code>
Untuk memahami percanggahan, kita mesti mendalami konsep pemadaman jenis. Semasa penyusunan, maklumat jenis generik dipadamkan, yang bermaksud bahawa pada masa jalan, hanya jenis mentah (dalam kes ini, ArrayList) tersedia.
Tatasusunan memerlukan jenis mentah, manakala serpihan kod pertama mencipta rujukan kepada senarai generik (ArrayList
Walau bagaimanapun, serpihan kod kedua cuba mencipta tatasusunan rujukan kepada senarai generik. Ini melanggar peraturan keselamatan jenis kerana tatasusunan bukan jenis parametrik dan tidak boleh menerima pembolehubah jenis atau jenis berparameter.
Untuk memintas had ini, kami boleh menaip tatasusunan seperti berikut:
<code class="java">ArrayList<Key>[] a = (ArrayList<Key>[]) new ArrayList[10];</code>
Dengan menyatakan secara eksplisit maklumat jenis generik dalam pelakon, kami memaklumkan pengkompil tentang jenis elemen tatasusunan yang dimaksudkan. Ini memenuhi keperluan keselamatan jenis pengkompil.
Sebaliknya, kita boleh menggunakan senarai senarai:
<code class="java">ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>();</code>
Ini sah kerana ArrayList bukan array. Setiap elemen dalam ArrayList luar ialah ArrayList
Sekatan pengkompil pada tatasusunan generik disediakan untuk menguatkuasakan keselamatan jenis. Tanpa semakan ini, adalah mudah untuk memperkenalkan ralat masa jalan yang halus dengan memberikan senarai jenis yang berbeza kepada tatasusunan senarai generik.
Dengan memahami sebab di sebalik tingkah laku pengkompil, kami boleh membuat keputusan termaklum tentang masa dan cara untuk menggunakan tatasusunan generik dan senarai senarai, memastikan kedua-dua kod ketepatan dan kebolehselenggaraan.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mengisytiharkan Susunan Senarai Generik di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!