Array Generik dalam Java
Di Java, generik dan tatasusunan tidak wujud bersama secara langsung. Apabila cuba mencipta tatasusunan generik yang memanjangkan jenis yang setanding, ralat mungkin timbul. Sebab asas untuk ini ialah generik Java dipadamkan semasa penyusunan.
Pertimbangkan kod berikut:
<code class="java">public class Hash<T extends Comparable<String>> { private T[] hashTable; private int tableSize; Hash(int records, double load) { tableSize = (int)(records / loadFactor); tableSize = findNextPrime(tableSize); hashTable = (T[])(new Object[tableSize]); // Error: Object cannot be cast to Comparable } }</code>
Pemadaman jenis Java menganggap tatasusunan sebagai kovarian, bermakna ia mengekalkan jenis elemennya pada masa larian. Oleh itu, tatasusunan jenis generik bukanlah jenis yang sama seperti tatasusunan jenis sebandingnya, dan tatasusunan jenis generik tidak boleh dihantar ke tatasusunan jenis generik.
Untuk memintas isu ini, satu penyelesaian ialah menggunakan Array.newInstance ():
<code class="java">private Comparable[] hashtable; ... hashtable = (Comparable[])Array.newInstance(Comparable.class, tableSize);</code>
Walau bagaimanapun, pendekatan ini mempunyai had. Kod warisan, pustaka luaran atau kebolehoperasian dengan bahasa lain mungkin memerlukan tatasusunan generik yang benar.
Akhirnya, biasanya disyorkan untuk mengelak daripada menggunakan tatasusunan dengan generik dalam Java. Sebaliknya, pertimbangkan untuk menggunakan kelas koleksi seperti ArrayList atau HashMap, yang memberikan lebih fleksibiliti dan keselamatan jenis.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mencipta Tatasusunan Generik di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!