Rumah  >  Artikel  >  Java  >  Varians dalam Jawa

Varians dalam Jawa

WBOY
WBOYke hadapan
2023-09-01 13:05:061042semak imbas

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;

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;

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

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) { /* ... */ }

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:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam