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

Mengapa Saya Tidak Boleh Mencipta Tatasusunan Generik dalam Java?

Susan Sarandon
Susan Sarandonasal
2024-10-28 22:15:31517semak imbas

 Why Can't I Create Generic Arrays in Java?

Tatasusunan Generik dalam Java

Tatasusunan dan generik mencipta sekatan jalan pengaturcaraan di Java. Anda tidak boleh membuat tatasusunan jenis parametrik secara langsung. Ini kerana tatasusunan adalah kovarian, bermakna ia mengekalkan jenis elemennya semasa masa jalan, manakala generik menggunakan pemadaman jenis.

Penyelesaian adalah dengan menggunakan Array.newInstance() seperti ini:

private Comparable[] hashtable;

...

hashtable = (Comparable[])Array.newInstance(Comparable.class, tableSize);

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa penyelesaian ini tidak sesuai.

Mengapa tidak menggunakan tatasusunan generik?

  • Tasusunan adalah kovarian, tetapi generik tidak .
  • Ini bermakna tatasusunan superjenis tidak semestinya tatasusunan subjenis.
  • Sebagai contoh, tatasusunan Objek[] tidak semestinya tatasusunan[] Setanding.

Untuk mengelakkan isu ini, anda disyorkan untuk menggunakan ArrayList dan bukannya tatasusunan apabila bekerja dengan generik. ArrayLists adalah kovarian dan selamat jenis, yang menjadikannya pilihan yang lebih baik untuk menyimpan jenis generik.

Untuk penjelasan yang lebih terperinci, rujuk Soalan Lazim Java Generics:

Bolehkah saya mencipta tatasusunan yang jenis komponennya ialah jenis parameter konkrit?

Tidak, kerana ia tidak selamat jenis.

Tatasusunan ialah kovarian, yang bermaksud tatasusunan rujukan superjenis ialah superjenis tatasusunan rujukan subjenis. Iaitu, Object[] ialah supertype String[] dan tatasusunan rentetan boleh diakses melalui pembolehubah rujukan jenis Object[].

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mencipta Tatasusunan 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