Mencipta Tatasusunan dengan Generik
Masalah:
Memahami batasan generik semasa mencipta tatasusunan dan asas sebab kenapa.
Konteks:
Anarasi dan generik mempunyai perbezaan asas, termasuk penguatkuasaan semula dan jenis.
Penjelasan:
Array vs. Generik:
- Tatasusunan diubah semula, bermakna ia mengekalkan maklumat jenisnya semasa masa jalan.
- Generik tidak disemak semula, bermakna maklumat jenisnya dipadamkan semasa penyusunan.
Jenis Kovarians:
- Tasusunan ialah kovarian, membenarkan penetapan tatasusunan jenis kelas super kepada tatasusunan jenis subkelas.
- Generik adalah invarian, melarang penetapan sedemikian.
Jenis Penguatkuasaan Semak:
- Generik menyediakan semakan jenis yang lebih kukuh pada masa penyusunan untuk mengelakkan ralat masa jalan.
- Tasusunan menggunakan Semakan Kedai Tatasusunan semasa masa jalan untuk menguatkuasakan keserasian jenis.
Isu dengan Tatasusunan Generik Penciptaan:
- Membuat tatasusunan dengan jenis komponen generik adalah tidak selamat kerana maklumat jenis masa jalan tidak diketahui, membawa kepada kemungkinan ArrayStoreExceptions.
Pengecualian untuk Kad Liar Tanpa Sempadan Jenis:
- Turutan jenis kad bebas tanpa sempadan (cth., Senarai>[]) dibenarkan kerana ia boleh dibuktikan semula dan membenarkan sebarang penetapan objek.
Penyelesaian untuk E[]:
- Gunakan kaedah Array#newInstance() untuk mencipta tatasusunan jenis generik yang dikehendaki, menghantarnya sebagai perlu.
Kesimpulan:
Mencipta tatasusunan generik adalah terhad kerana perbezaan asas dalam tingkah laku antara tatasusunan dan generik. Mekanisme penguatkuasaan jenis asas dan implikasi keselamatan mesti dipertimbangkan dengan teliti apabila bekerja dengan tatasusunan dan generik.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mencipta Tatasusunan Generik Secara Terus di 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