Tatasusunan Generik dalam Java: Penyelaman Komprehensif
Tatasusunan dan generik Java mungkin kelihatan tidak serasi pada pandangan pertama. Walaupun generik membenarkan keselamatan dan fleksibiliti jenis, tatasusunan dalam Java sememangnya kovarian, bermakna ia mengekalkan jenis elemen yang tepat pada masa jalan. Ini menimbulkan cabaran apabila cuba mencipta tatasusunan jenis generik.
Pertimbangkan coretan kod berikut:
<code class="java">public class Hash<T extends Comparable<String>> { private T[] hashTable; // ... }</code>
Kod ini cuba mencipta tatasusunan objek generik yang memanjangkan Setanding. Walau bagaimanapun, Java tidak membenarkan menghantar tatasusunan Objek kepada tatasusunan jenis parameter, seperti yang dilihat dalam mesej ralat yang muncul semasa penyusunan:
java.lang.Object; cannot be cast to [Ljava.lang.Comparable;
Untuk menyelesaikan masalah ini, seseorang boleh menggunakan Tatasusunan. kaedah newInstance():
<code class="java">private Comparable[] hashtable; // ... hashtable = (Comparable[])Array.newInstance(Comparable.class, tableSize);</code>
Walau bagaimanapun, pendekatan ini masih tidak mencipta tatasusunan jenis parameter. Tatasusunan dalam Java adalah selamat jenis pada masa jalan, jadi ia tidak boleh dihantar ke jenis lain sesuka hati.
Generik dalam Java mengalami pemadaman jenis, di mana parameter jenis dialih keluar semasa penyusunan. Ini memastikan tatasusunan mengekalkan jenis elemen khusus mereka, menghalang penghantaran yang tidak diingini. Akibatnya, adalah tidak mungkin untuk mencipta tatasusunan jenis parameter tertentu.
Dalam kes tertentu ini, adalah disyorkan untuk menggunakan ArrayList dan bukannya tatasusunan. ArrayLists menawarkan saiz dinamik, sokongan generik dan lebih sesuai untuk kebanyakan senario.
Untuk penjelasan terperinci tentang isu ini, rujuk Soalan Lazim Java Generics: https://docs.oracle.com/javase/7 /docs/technotes/guides/generics/faq.html#CanIcreatenarraywhosecomponenttypeisaconcreteparameterizedtype
Atas ialah kandungan terperinci Bolehkah saya Mencipta Tatasusunan Jenis Parameter di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!