Rumah > Java > javaTutorial > teks badan

Bilakah Saya Harus Menggunakan `` lwn. `` dalam Java Generics?

Linda Hamilton
Lepaskan: 2024-11-22 13:08:13
asal
691 orang telah melayarinya

When Should I Use `` vs. `` in Java Generics?

Generik dan Penggunaan lwn.

Di Java, generik membenarkan operasi selamat jenis ke atas julat jenis yang lebih luas. Walau bagaimanapun, persoalan timbul apabila memilih antara dan dalam senario tertentu, seperti yang dibentangkan di bawah:

Map<String, Class<? extends Serializable>> expected = null;
Map<String, Class<java.util.Date>> result = null;
assertThat(result, is(expected)); 
Salin selepas log masuk

Kod ini gagal dihimpun kerana jenis hujah yang salah dihantar kepada kaedah assertThat, yang menjangkakan Matcher bukannya Matcher. Untuk memahami sebab ini berlaku, kita perlu menyelidiki konsep kovarian dalam jenis generik.

Kovarian menyatakan bahawa subjenis boleh ditugaskan dengan selamat kepada superjenis. Dengan kata lain, Kelas objek boleh diberikan kepada Kelas objek. Walau bagaimanapun, perkara sebaliknya tidak benar: Kelas objek tidak boleh diberikan kepada Kelas objek.

Ini kerana kovarians hanya digunakan pada parameter jenis itu sendiri, bukan pada argumen jenis yang terkandung di dalamnya. Dalam contoh kami, java.util.Date ialah subjenis Serializable, tetapi Class tidak semestinya subjenis Kelas.

Menukar tandatangan kaedah assertThat kepada Matcher menangani isu ini dengan membenarkan pemadan yang sepadan dengan mana-mana subjenis jenis sebenar. Ini memberikan fleksibiliti yang diperlukan untuk situasi seperti yang terdapat dalam coretan kod.

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa terdapat potensi kelemahan untuk menggunakan dalam konteks ini. Sebagai contoh, ia boleh membawa kepada tingkah laku yang tidak dijangka atau mengurangkan keselamatan jenis dalam senario tertentu. Oleh yang demikian, ia harus digunakan dengan bijak dan dengan pertimbangan yang teliti.

Mengenai genericity of the assertItu kaedah, ia membenarkan penyemakan jenis untuk memastikan pemadanan yang digunakan adalah serasi dengan jenis hasil. Walaupun ini tidak menghapuskan sepenuhnya kemungkinan ralat masa jalan, ia menambahkan tahap keselamatan dengan menghalang perlawanan yang tidak serasi.

Atas ialah kandungan terperinci Bilakah Saya Harus Menggunakan `` lwn. `` dalam Java Generics?. 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