Peraturan keserasian generik fungsi Java memastikan keselamatan jenis. Peraturan termasuk: senarai parameter jenis yang sama, sempadan parameter jenis yang sama, dan parameter jenis kontravarian dan kovarian. Contohnya, 56bc093f3216b38f13a475f7fa48b608> serasi dengan 4445611b66c78394188dd2a1f2510c39>
Peraturan Keserasian untuk Generik Fungsi Java
Fungsi generik Java membenarkan kami menulis kod dalam cara yang selamat jenis, tetapi tidak mengikut peraturan keserasian yang betul boleh mengakibatkan ralat masa kompilasi. Mari kita susun peraturan untuk mengelakkan masalah sedemikian.
Peraturan 1: Senarai parameter jenis adalah sama
Hanya jenis fungsi dengan senarai parameter yang sama yang serasi. Jadi contoh berikut akan mengakibatkan ralat:
public <T> void func1(T v) {} public <U> void func2(U v) {}
Peraturan 2: Parameter jenis mempunyai had yang sama
Bounds mentakrifkan nilai yang dibenarkan untuk jenis generik. Fungsi tidak serasi jika ia mempunyai sempadan yang berbeza untuk parameter jenis yang sama. Contohnya:
public <T extends Comparable<T>> void func1(T v) {} public <T extends Number> void func2(T v) {}
Peraturan 3: Parameter jenis kontravarian dan kovarian
8742468051c85b06f0a0af9e3e506b5c
adalah serasi dengan 1eefd63bbe027a2807ccada294a3372c
. Contohnya, 9e828ca004921c559f1a0411055a0190>
serasi dengan 7e3f95175fc72649f7afad09c40191bd>
. 8742468051c85b06f0a0af9e3e506b5c
类型兼容于 1eefd63bbe027a2807ccada294a3372c
。例如9e828ca004921c559f1a0411055a0190>
兼容于 7e3f95175fc72649f7afad09c40191bd>
。1eefd63bbe027a2807ccada294a3372c
类型兼容于 8742468051c85b06f0a0af9e3e506b5c
。例如f7e83be87db5cd2d9a8a0b8117b38cd4
兼容于 a87fdacec66f0909fc0757c19f2d2b1d
。实战案例
考虑以下代码:
public <T extends Animal> void func1(T t) { // 代码... } public void func2(Cat c) { // 代码... }
func1
期望一个 Animal
或其子类的实例。func2
期望一个 Cat
实例。由于 Cat
扩展 Animal
,因此 func1
可以兼容于 func2
,从而可以接收 Cat
Kovarian: Jika jenis superclass T boleh menggantikan jenis subkelas S, maka jenis 1eefd63bbe027a2807ccada294a3372c
adalah serasi dengan 8742468051c85b06f0a0af9e3e506b5c
. Contohnya, f7e83be87db5cd2d9a8a0b8117b38cd4
serasi dengan a87fdacec66f0909fc0757c19f2d2b1d
.
Contoh Praktikal
Pertimbangkan kod berikut:rrreee
func1
menjangkakan contoh Animal
atau subkelasnya. func2
menjangkakan contoh Cat
. Memandangkan Kucing
memanjangkan Haiwan
, func1
serasi dengan func2
dan boleh menerima Cat
Type parameter. 🎜🎜🎜Kesimpulan🎜🎜🎜Adalah penting untuk mematuhi peraturan keserasian untuk generik fungsi untuk mengelakkan ralat masa penyusunan dan memastikan keselamatan jenis. 🎜Atas ialah kandungan terperinci Peraturan keserasian untuk generik fungsi Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!