Jadual Kandungan
Memahami varians
Rumah Java javaTutorial Varians dalam Jawa

Varians dalam Jawa

Sep 01, 2023 pm 01:05 PM
Pengiraan varians varians statistik java algoritma varians

Varians dalam Jawa

Dengan keupayaan pengaturcaraan berorientasikan objek yang berkuasa, Java menyediakan pengaturcara dengan pelbagai mekanisme untuk membangunkan kod yang fleksibel dan cekap. Salah satu konsep yang sering diabaikan tetapi penting ialah varians. Memahami varians adalah penting untuk menguasai Java, terutamanya apabila bekerja dengan generik dan koleksi. Artikel ini melihat secara mendalam varians di Jawa, meliputi jenisnya (kovarians, kontravarian dan invarian) dan aplikasi praktikalnya.

Memahami varians

Variance merujuk kepada hubungan antara subjenis jenis yang lebih kompleks dan subjenis komponennya. Ringkasnya, ia menentukan cara hierarki jenis kelas dipelihara apabila kelas ini digunakan sebagai parameter jenis. Varian menjadi sangat penting apabila berurusan dengan generik, menyediakan rangka kerja untuk memastikan keselamatan jenis sambil membenarkan tahap fleksibiliti dalam tugasan.

Varians boleh dibahagikan kepada tiga jenis utama:

  • Kovarian - Jika KelasB ialah subkelas KelasA, Koleksi boleh dianggap sebagai Koleksi#🎜#subkategori🎜

  • Contravariant - Jika KelasB ialah subkelas KelasA, maka Koleksi boleh dianggap sebagai subkelas Koleksi. p>

  • Immutability - Collection dan Collection tidak mempunyai hubungan subjenis, tanpa mengira hubungan antara ClassA dan ClassB.

Mari kita mendalami setiap konsep.

Kovarian dalam Jawa

Di Jawa, kovarians dicapai dengan menggunakan kad bebas dan klausa lanjutan. Mari kita pertimbangkan contoh -

List<Animal> animals = new ArrayList<>();
<List<super Cat>cats=animals;
Salin selepas log masuk

Dalam kes ini, anda boleh menambah objek Kucing atau mana-mana contoh pada kucing, tetapi anda tidak boleh membaca daripada kucing dan menganggap hasilnya sebagai Kucing kerana ia mungkin mengandungi sebarang superjenis Kucing, termasuk Haiwan atau Objek. Oleh itu, anda boleh menulis kepada kucing, tetapi anda tidak boleh membacanya dengan cara yang selamat jenis

Ketidakbolehubah dalam Jawa

Ketidakbolehubah ialah gelagat lalai dalam Java, bermakna tiada hubungan subjenis antara Collection

dan Collection, tanpa mengira hubungan antara ClassA dan ClassB. Ini mungkin kelihatan terhad, tetapi ini penting untuk keselamatan jenis. Dalam Java, List bukan subjenis List, walaupun String ialah subjenis Objek. Ini kerana koleksi Java boleh berubah dan membenarkan perhubungan ini akan mengakibatkan ralat jenis masa jalan.

List<String> strings = new ArrayList<>();
// Compile error: Incompatible types
List<Object> objects = strings;
Salin selepas log masuk

Dalam contoh di atas, walaupun String ialah subjenis Objek, List

bukan subjenis Senarai, jadi ralat kompilasi berlaku.

Ciri ini pada mulanya mungkin kelihatan seperti pengehadan, tetapi ia merupakan aspek penting dalam sistem jenis Java yang memastikan operasi yang tidak selamat tidak dilakukan. Jika List

ialah subjenis List, objek yang bukan rentetan boleh ditambahkan pada List, menyebabkan ClassCastException pada masa jalan.

List<String> strings = new ArrayList<>();
// If this were allowed...
List<Object> objects = strings;
// ...this would put a non-String into a List<String>
objects.add(new Object());
String str= strings.get(0); // ClassCastException
Salin selepas log masuk

Contoh ini menggambarkan mengapa mengekalkan kebolehubah jenis selamat adalah penting.

Parameter dan varians jenis terhad

Kovarian dan kontravarian paling biasa digunakan untuk parameter jenis terikat. Parameter jenis bersempadan ialah satu cara untuk menunjukkan bahawa parameter jenis mestilah subjenis (melanjutkan kata kunci) atau superjenis (kata kunci super) bagi jenis tertentu. Ini membolehkan fleksibiliti dalam menentukan jenis yang boleh dihantar kepada kaedah sambil mengekalkan keselamatan jenis.

Sebagai contoh, anda mungkin mempunyai kaedah yang beroperasi pada senarai Nombor dan semua subkelasnya -

public <T extends Number> void processNumbers(List<T> numbers) { /* ... */ }
Salin selepas log masuk

Dalam kaedah ini, T ialah parameter jenis terhad dan mestilah Nombor atau subjenis Nombor. Ini membolehkan kaedah beroperasi pada List

, List, List, dsb., mempamerkan kovarians

KESIMPULAN

Ringkasnya, memahami varians dalam Java adalah penting untuk menggunakan generik dan koleksi dengan berkesan. Ia membenarkan kod fleksibel sambil memastikan keselamatan jenis.

Kovarian, menggunakan kata kunci lanjutan, membenarkan subkelas menggantikan superclass, dengan itu mencapai pemprosesan objek yang lebih umum. Contravariance, sebaliknya, membolehkan superclass digantikan untuk subclass, membolehkan julat operasi yang lebih luas dilakukan pada objek yang lebih khusus.

Ketidakbolehubahan mengekalkan keselamatan jenis dengan memastikan koleksi pelbagai jenis (walaupun berkaitan melalui pewarisan) mengekalkan keunikannya dan mengelakkan ralat jenis masa jalan.

对象>字符串>对象>字符串>#🎜 🎜#

Atas ialah kandungan terperinci Varians dalam Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

Artikel ini menganalisis empat kerangka JavaScript teratas (React, Angular, Vue, Svelte) pada tahun 2025, membandingkan prestasi, skalabilitas, dan prospek masa depan mereka. Walaupun semuanya kekal dominan kerana komuniti dan ekosistem yang kuat, popul mereka yang relatif

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap Mar 07, 2025 pm 05:52 PM

Artikel ini menangani kelemahan CVE-2022-1471 dalam Snakeyaml, kecacatan kritikal yang membolehkan pelaksanaan kod jauh. Ia memperincikan bagaimana peningkatan aplikasi boot musim bunga ke snakeyaml 1.33 atau lebih lama mengurangkan risiko ini, menekankan bahawa kemas kini ketergantungan

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Mar 17, 2025 pm 05:35 PM

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Mar 17, 2025 pm 05:44 PM

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru Mar 07, 2025 pm 06:12 PM

Node.js 20 dengan ketara meningkatkan prestasi melalui penambahbaikan enjin V8, terutamanya pengumpulan sampah yang lebih cepat dan I/O. Ciri -ciri baru termasuk sokongan webassembly yang lebih baik dan alat penyahpepijatan halus, meningkatkan produktiviti pemaju dan kelajuan aplikasi.

Iceberg: Masa Depan Jadual Data Tasik Iceberg: Masa Depan Jadual Data Tasik Mar 07, 2025 pm 06:31 PM

Iceberg, format meja terbuka untuk dataset analitik yang besar, meningkatkan prestasi data dan skalabiliti. Ia menangani batasan parket/orc melalui pengurusan metadata dalaman, membolehkan evolusi skema yang cekap, perjalanan masa, serentak w

Cara berkongsi data antara langkah -langkah dalam timun Cara berkongsi data antara langkah -langkah dalam timun Mar 07, 2025 pm 05:55 PM

Artikel ini meneroka kaedah untuk berkongsi data antara langkah -langkah timun, membandingkan konteks senario, pembolehubah global, lulus argumen, dan struktur data. Ia menekankan amalan terbaik untuk mengekalkan, termasuk penggunaan konteks ringkas, deskriptif

Bagaimanakah saya dapat melaksanakan teknik pengaturcaraan berfungsi di Java? Bagaimanakah saya dapat melaksanakan teknik pengaturcaraan berfungsi di Java? Mar 11, 2025 pm 05:51 PM

Artikel ini meneroka mengintegrasikan pengaturcaraan berfungsi ke dalam Java menggunakan ekspresi Lambda, API Streams, rujukan kaedah, dan pilihan. Ia menyoroti faedah seperti kebolehbacaan dan kebolehkerjaan kod yang lebih baik melalui kesimpulan dan kebolehubahan

See all articles