Generik Mengikat dengan Kata Kunci 'Super' Kontravarian
Dalam generik Java, kata kunci 'super' memainkan peranan penting dalam mewujudkan subjenis untuk jenis parameter. Walau bagaimanapun, ia hanya boleh digunakan dengan kad bebas dan bukan dengan parameter jenis bernama. Ini mengemukakan soalan biasa: mengapa?
Mengapa Tidak dengan Parameter Jenis?
Sebab 'super' tidak boleh digunakan dengan parameter jenis ialah kekangan sedemikian akan menjadi tidak berkesan dalam mencegah tingkah laku yang tidak dijangka. Object, kelas super muktamad semua jenis rujukan, akan menjadikan sebarang terikat 'super' hipotesis tidak bermakna dalam amalan.
Sebagai contoh, pertimbangkan kaedah hipotesis berikut dalam antara muka Koleksi:
<code class="java"><S super T> S[] toArray(S[] a);</code>
Percubaan untuk mengisytiharkan kaedah sedemikian akan gagal pada masa penyusunan. Walaupun ia dibenarkan, ia tidak akan mencapai tujuan yang dimaksudkan. Memandangkan semua tatasusunan jenis rujukan ialah tatasusunan Objek, mana-mana jenis tatasusunan boleh digunakan sebagai hujah, menjadikan jilid 'super' tidak berkesan.
Konsekuensi untuk Tatasusunan
Generik dan tatasusunan mempunyai hubungan yang kompleks, dan kekurangan sempadan 'super' untuk parameter jenis dinamakan mencerminkan ini. Walaupun nampaknya wajar untuk mengehadkan tatasusunan parameter kepada hanya kelas super jenis parameter, itu tidak mungkin untuk tatasusunan.
Sebagai contoh, 'Senarai
Kesimpulan
Akhirnya, pengecualian kata kunci 'super' daripada parameter jenis dinamakan dalam generik Java adalah disebabkan oleh had sedia ada tatasusunan dalam konteks generik. Dengan melarang sempadan sedemikian, Java menghalang pembangun daripada mencipta kekangan yang berpotensi mengelirukan yang akhirnya akan gagal memberikan jaminan keselamatan yang diingini.
Atas ialah kandungan terperinci Mengapa Kita Tidak Boleh Menggunakan Kata Kunci \'Super\' dengan Parameter Jenis Dinamakan dalam Java Generics?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!