Rumah > Java > javaTutorial > Java Generics: What\'s the Deal with the `? super` Kata kunci?

Java Generics: What\'s the Deal with the `? super` Kata kunci?

Susan Sarandon
Lepaskan: 2024-11-28 01:37:14
asal
209 orang telah melayarinya

Java Generics: What's the Deal with the `? super` Keyword?

Java Generik: Membongkar Enigma Kata Kunci 'Super'

Walaupun meneroka pelbagai sumber mengenai generik, anda masih menghadapi kekeliruan mengenai ' kata kunci super'. Mari kita mendalami selok-belok menggunakan 'super' dalam generik Java untuk menjelaskan keraguan ini.

1. Membongkar Percanggahan dengan '? super Number'

Apabila mengisytiharkan koleksi sebagai 'Senarai', anda mungkin menganggap bahawa ia boleh memuatkan objek yang merupakan ibu bapa kepada Number. Walau bagaimanapun, perkara sebaliknya berlaku: anda boleh menambah Integer tetapi bukan Objek.

Puncanya terletak pada penukaran tangkapan. 'Senaraikan' boleh menangkap hanya jenis yang boleh memanjangkan Nombor dan superjenisnya. Memandangkan Object ialah superclass bagi Nombor, tetapi bukan sambungan, ia tidak boleh ditangkap. Walau bagaimanapun, Integer ialah subjenis Nombor, jadi ia boleh ditambah.

2. Mentafsir Gelagat dengan 'Senarai' dan 'test()'

Menyusun 'test(sList);' gagal kerana 'Senaraikan' tidak boleh ditangkap-tukar oleh 'Senarai'. Walaupun String ialah superjenis Objek, Objek bukan lanjutan Nombor. Ini melanggar peraturan penukaran tangkapan.

Ringkasnya, '? super T' menandakan bahawa koleksi boleh menyimpan objek jenis T atau mana-mana kelas supernya yang serasi sambungan. Walau bagaimanapun, ini tidak termasuk semua superjenis, hanya yang memanjangkan jenis yang ditentukan.

3. Mengapa '' adalah Dilarang

Java tidak membenarkan '' kerana ia membawa kepada situasi yang tidak jelas. Contohnya, 'Senaraikan' mungkin menangkap kedua-dua 'Senarai' dan 'Senaraikan' (memandangkan Object ialah supertype semua objek). Ini akan melanggar keselamatan jenis generik.

Atas ialah kandungan terperinci Java Generics: What\'s the Deal with the `? super` Kata kunci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan