Rumah >Java >javaTutorial >Mengapa Saya Tidak Boleh Mencipta Tatasusunan Generik di Jawa?

Mengapa Saya Tidak Boleh Mencipta Tatasusunan Generik di Jawa?

Barbara Streisand
Barbara Streisandasal
2024-10-30 23:14:29255semak imbas

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

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!

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